Javalin:一个轻量的 Web Framework

article/2025/10/13 22:40:04

说起 Java 语言下的 Web 框架那就非 Spring Framework 不可了,但是今天在和别人在聊天的过程中发现了一个新奇的项目 Javalin。Javalin 是一个轻量的 Web 框架。支持 WebSocket, HTTP2 和异步请求。简单的看了一下官方的说明文档,确实非常轻量,几行代码就可以启动一个 HTTP 服务。

Javalin 最初是 SparkJava 的一个分支,后来受到 JavaScript 框架 koa.js 的影响,逐渐独立成一个新的项目发展。

首先来看看一个比 Hello World 稍微复杂一些的例子:

var app = Javalin.create(config -> {config.defaultContentType = "application/json";config.autogenerateEtags = true;config.addStaticFiles("/public");config.asyncRequestTimeout = 10_000L;config.dynamicGzip = true;config.enforceSsl = true;
}).routes(() -> {path("users", () -> {get(UserController::getAll);post(UserController::create);path(":user-id"(() -> {get(UserController::getOne);patch(UserController::update);delete(UserController::delete);});ws("events", userController::webSocketEvents);});
}).start(port);

验证路径参数

var myQpStr = ctx.queryParam("my-qp"); // 没有验证,返回字符串或空
var myQpInt = ctx.pathParam("my-qp", Integer.class).get(); // 返回一个整数或抛出异常
var myQpInt = ctx.formParam("my-qp", Integer.class).check(i -> i > 4).get(); // 整数 > 4// 验证两个依赖的查询参数 :
var fromDate = ctx.queryParam("from", Instant.class).get();
var toDate = ctx.queryParam("to", Instant.class).check(it -> it.isAfter(fromDate), "'to' has to be after 'from'").get();// 验证一个json消息体:
var myObject = ctx.bodyValidator(MyObject.class).check(obj -> obj.myObjectProperty == someValue).get();

handler

//前置handler
app.before(ctx -> {// 在所有请求之前运行
});
app.before("/path/*", ctx -> {// 在/path/*请求之前运行
});//端点handler
app.get("/", ctx -> {// 一些代码ctx.json(object);
});app.get("/hello/*, ctx -> {// 捕获所有对/hello/子路径的请求 
});//后置handler
app.after(ctx -> {// 在所有请求之后运行
});
app.after("/path/*", ctx -> {// 在/path/*请求之后运行 
});

使用 AccessManager 接口来实现验证和授权。

如果要部署 Javalin 应用程序,开发人员只需创建一个包含了依赖(使用 maven-assembly-plugin)的 jar,然后用 java -jar filename.jar 发布该 jar。Javalin 自带一个嵌入式 Jetty 服务器,无需额外的应用程序服务器。

Javalin 还有 专门为教育工作者准备的页面 ,该页面强调学生可以从 Javalin 受益,因为 Javalin 提供了嵌入式的 Jetty 服务器,所以不需要 Servlet Container/Application 服务器配置就可以开始编码。

有一系列教程可供使用,如 Running on GraalVM 和 Kotlin CRUD REST API 。可以在教程页面找到完整的列表。

文档页面 提供了有关 Javalin 的更多细节。用户可以通过 maven 或从手动 maven中央库 下载 Javalin。

部署执行

通过 mvn package 就可以打包一个 jar 文件,直接运行 java -jar xxx.jar 就可以启动。

启动 7000 端口占用问题

因为我在 macOS 下启动 Javalin 程序,默认是使用的 7000 端口,但是起来的时候发现端口被占用了。

用 lsof 查看

❯ sudo lsof -nP -i4TCP |grep 7000
Password:
Swinsian   1563 einverne   36u  IPv4 0xa107511eb4d4e74b      0t0  TCP 127.0.0.1:50677->127.0.0.1:7000 (CLOSED)
Swinsian   1563 einverne   37u  IPv4 0xa107511eb4d4e74b      0t0  TCP 127.0.0.1:50677->127.0.0.1:7000 (CLOSED)
ControlCe  1578 einverne   29u  IPv4 0xa107511eb42171fb      0t0  TCP *:7000 (LISTEN)

查看进程

❯ sudo ps aux | grep 1578
einverne         46918   0.7  0.0 34253900    968 s000  S+    2:37PM   0:00.00 grep --color=auto 1578
einverne          1578   0.0  0.1 36594320  36324   ??  S    Sun12PM   1:24.15 /System/Library/CoreServices/ControlCenter.app/Contents/MacOS/ControlCenter

发现竟然是系统的 ControlCenter 占用了本地 7000 端口,用如下的方法禁用。

94a2a8a028a3013c2cf2a915ff1c07d2.png

参考文档

  • 官方文档:https://javalin.io/documentation

  • 官方教程:https://javalin.io/tutorials/

  • Running Javalin on GraalVM:https://javalin.io/2018/09/27/javalin-graalvm-example.html

转自:@einverne,

链接:einverne.github.io/post/2022/09/javalin-first-impression.htm

------

我们创建了一个高质量的技术交流群,与优秀的人在一起,自己也会优秀起来,赶紧点击加群,享受一起成长的快乐。另外,如果你最近想跳槽的话,年前我花了2周时间收集了一波大厂面经,节后准备跳槽的可以点击这里领取!

推荐阅读

  • 10.1K Star,值得推荐的企业级开源低代码引擎!

  • 40岁还在做程序员是好还是坏?

  • 苹果 M1/M2 Mac 正式支持运行Win11

··································

你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。

点击领取2022最新10000T学习资料


http://chatgpt.dhexx.cn/article/wXjanvsM.shtml

相关文章

ControlCenter and Dataviewer

Hardware and cable assignment Download: https://sensirion.com/products/sensor-evaluation/control-center/ logging address: “File” --> “Setting” --> “Output Directory” data folder: “File” --> “Open Data Log Folder” Plot the data …

战神 控制中心 controlcenter安装

前言 啊啊啊啊,终于解决问题了,希望对正在看的您有所帮助! 首先说下背景,本人使用的是战神Z7-CT7NA,昨天重装了win10的系统,在官网 战神电脑驱动下载 下载对应的电脑驱动,安装了,可…

神舟战神笔记本Controlcenter3.0安装教程,解决osd only

把Controlcenter误删,安装不成供,且屡次出现“osd only",折腾了一下午,真的是绝绝子,借鉴了zhihu大佬和小破站下面的神人评论,现在将解决方法总结如下,希望帮助你们少走弯路! …

AHB

一、信号定义 以下是有多个master时由arbiter产生的信号,一般在one master - one slave project中用不上; 判断跨1k: 当地址ADDR_plus_burst[10:0] 的bit10为1时,即ADDR_plus_burst[10]1, cross_1k_byte1; 判断跨4k:当地址ADDR_p…

一文学习 AHB ram 验证

文章目录 前言面试答案1. `uvm_do()` 的源代码零、计算机体系结构中的memory1. memory中的大小端存储2. 内存对齐的理解2.1 什么是内存对齐2.2 为什么要内存对齐2.3 怎么进行内存对齐一、搭建验证框架1. code 顺序2. coverage coding二、搭建设计框架1. config 的脉络2. vif 的…

AHB-SRAM简单设计之总线控制单元 ahb_slave_if.v

前言 这部分的代码在最后,本来打算刚开始就直接上代码,可是200多行,有点占篇幅。我们就先分析下这部分! 推荐一篇硕士论文,可以自行搜索下载,或点击免费下载:基于AHB总线SRAM控制器 的设计及优…

AMBA5 AHB协议规范(AHB5,AHB-Lite)中文版-第六章 数据总线

第六章 数据总线 本章描述了数据总线。它包含以下部分: – 数据总线 on page 6-60. – 大小端 on page 6-61. – 数据总线宽度 on page 6-65. 6.1 Data buses 实现AHB系统需要独立的读写数据总线。虽然推荐的最小数据总线宽度被指定为32位,但可以按照…

[接口-AMBA-AHB] AHB总线协议

一、典型AMBA系统 AHB总线的强大之处在于它可以将微控制器CPU、高带宽的片上RAM、高带宽的外部存储器接口、DMA总线master、各种拥有AHB接口的控制器等连接起来构成一个独立的完成SOC系统,不仅如此,还可以通过AHB-APB桥来连接APB总线系统。 AHB可以成为一…

基于AHB的SRAM设计

基于AHB的SRAM设计 一、描述 作为系统的缓存;SRAM存储体由MeMery complier生成;项目完成SRAM控制器的设计;SRAM作为AHB Slave的形式存在; 二、特性 支持8位,16位和32位的SRAM数据读写操作;支持SRAM的单…

AHB lite协议

文章目录 概述特点AHB的组成单个master的AHB lite结构多个master的AHB lite结构结构1结构2 AHB lite基本信号1.系统信号2.master3.slave信号4.译码器信号5.多路器 信号详细解释HSIZE[2:0]HTRANS[1:0]HBURST[2:0]HREADY与HREADYOUTHRESP AHB基本传输1.没有等待状态的单个传输2.有…

【读书笔记】AMBA 2 AHB、AMBA 3 AHB(AHB_Lite)和AMBA 5 AHB协议比较

1、牛客算是一个Verilog宝藏刷题网站了&#xff0c;网站提供在线仿真环境&#xff0c;不用自己找题&#xff08;点击直达&#xff09;&#xff0c;<刷题记录>专栏&#xff0c;持续打卡中… 2、官方手册&#xff1a;AMBA系列官方协议规范文档&#xff0c;点击下载 更详细的…

Ahb2ApbBridge

一、设计前需注意 &#xff08;1&#xff09;要做总线&#xff0c;协议是关键&#xff0c;每个控制信号与输入输出的时序一定要搞清楚&#xff0c;直接看amba官方spec&#xff0c;链接已贴出http://pan.baidu.com/s/1gfwxTWB。 &#xff08;2&#xff09;Ahb2Apb桥作为逻辑连接…

AHB总线协议

文章目录 1.说明2.简介3. SOC中的AHB4.完整的AHB架构5.AHB接口信号列表6.htrans[1:0]/hsize[2:0]/hburst[2:0]/hresp[1:0]信号解读1.htrans[1:0]2.hsize[2:0]3.hburst[2:0]4. hresp[1:0] 7.基本传输1. 没有等待的读写操作2.有等待的传输3. 多个流水传输3.WRAP4的传输 8. hready…

AMBA AHB介绍

AMBA AHB介绍 AHB是为提出高性能可综合设计的要求而产生的新一代AMBA总线。它是一种支持多总线主机和提供高带宽操作的高性能总线。 AMBA AHB实现了高性能&#xff0c;高时钟频率系统的以下特征要求&#xff1a; 突发传输分块处理单周期总线主机移交非三态执行更宽的数据总线…

qspi AHB总线学习 - 01

经过几天的学习发现如果不了解AHB总线有些知识get不到&#xff0c;下面是转 qixin_william的博客 http://blog.163.com/qixin_william/blog/static/240217035201491133626819/ 一、AHB的基本介绍 AHB是ARM退出的AMBA总线系列中的其中一种&#xff0c;它是一种高性能的pipe系统总…

AMBA5 AHB协议规范(AHB5,AHB-Lite)中文版-第五章 从机响应信号

第五章 从机响应信号 介绍从机响应信号。它包括以下部分: – 从机传输响应on page 5-56. 5.1 Slave transfer responses 在主机开始传输后&#xff0c;控制传输的进展。在传输开始后&#xff0c;主机不能取消传输。 对于支持AHB5 Exclusive_Transfers属性的组件&#xff0c;…

AHB总线学习汇总

博客不是写书&#xff0c;基本的背景也不做什么介绍了&#xff0c;了解的人是不会介意这些东西的。 一、AHB的基本介绍 AHB是ARM退出的AMBA总线系列中的其中一种&#xff0c;它是一种高性能的pipe系统总线。 1. AHB总线有一下特性&#xff1a; a.Burst 传输 b.Split 事务处理…

AHB协议相关

AHB协议相关 Created: November 9, 2021 7:19 PM Tags: AMBA &#x1f340;简介 AHB(Advanced High Performance Bus)总线规范是AMBA(Advanced Microcontroller Bus Architecture) V2.0总线规范的一部分&#xff0c;AMBA总线规范是ARM公司提出的总线规范&#xff0c;被大多数…

AHB协议

文章目录 什么是AHB总线协议AHB总线组成AHB信号描述AHB传输Bust传输 AMBA高级处理器总线架构&#xff0c;不同的速率要求构成了高性能SOC设计的通信标准: AHB高级高性能总线APB高级外围总线AXI高级可拓展接口 什么是AHB总线协议 AHB&#xff1a;主要是针对高速率、高频宽及快…

AHB 协议学习

文章目录 AHB 协议学习一、 AHB 协议 信号二、 AHB 协议 传输2.1 a read transfer with two wait states2.2 a write transfer with one wait states2.3 transfer with HTRANS&#xff08;控制信号&#xff09;**2.4 transfer &#xff1a;Eight-beat incrementing burst, INCR…