服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

Javalin:一个轻量的 Web Framework

日期: 来源:ImportNew收集编辑:

(给ImportNew加星标,提高Java技能)


说起 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


//前置handlerapp.before(ctx -> {    // 在所有请求之前运行});app.before("/path/*", ctx -> {    // 在/path/*请求之前运行});
//端点handlerapp.get("/", ctx -> { // 一些代码 ctx.json(object);});
app.get("/hello/*, ctx -> { // 捕获所有对/hello/子路径的请求 });
//后置handlerapp.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 7000Password: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 1578einverne         46918   0.7  0.0 34253900    968 s000  S+    2:37PM   0:00.00 grep --color=auto 1578einverne          1578   0.0  0.1 36594320  36324   ??  S    Sun12PM   1:24.15 /System/Library/CoreServices/ControlCenter.app/Contents/MacOS/ControlCenter


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



参考文档

  • 官方文档: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.html


- EOF -

推荐阅读  点击标题可跳转

1、一文了解GraalVM

2、Java 运行包精简探索(GraalVM)

3、Spring Framework 6 中的新功能和增强功能


看完本文有收获?请转发分享给更多人

关注「ImportNew」,提升Java技能

点赞和在看就是最大的支持❤️


相关阅读

  • Word 超神插件,用了才知道有多爽!

  • 打工人,打工魂,小伙伴们,精神状态还稳定吗?当然我没有嘲讽和幸灾乐祸的意思,毕竟我这不也在码字么,人类的悲欢有时候是可以相通的……既然逃不开干活的宿命,那就只能找个趁手的工具
  • SNOWKIDS品牌 PD+QC3.0 双端口壁式充电器

  • ---爱扫货发车第 1538 期---产品介绍SNOWKIDS品牌全新带包装盒到货,原价34.5元/个,现上车团购价一个仅需19.9元!!【PD+QC3.0 双端口壁式充电器】USB 壁式充电器(最大总功率 30W),具
  • Elecife 品牌12合一扩展坞,出口品质,超低价格

  • ---爱扫货发车第 1542 期---前言大家催爆的12合一扩展坞来啦,跨境电商转内销,Elecife品牌12合一扩展坞,可为C口设备拓展多种接口,让生活更方便,办公更轻松。发车价优,赶紧上车!!其中
  • 对于很多私域项目,解决了流量就解决了95%的问题

  • 这句话是昨天请教个朋友私域问题时跟我说的,特别是潮牌这个项目,只要解决了流量,这个项目你就解决了95%的问题,没有流量或者说买不到粉,这个项目基本上就可以说死定了,就这么夸张
  • 实战|记一次横向移动渗透测试

  • | 作者:windcctv,转自FreeBuf.COM本次渗透在几个docker虚拟机间多次横向移动,最终找到了一个可以进行docker逃逸的出口,拿下服务器。渗透过程曲折但充满了乐趣,入口是172.17.0.6
  • K8s API Server未授权命令执行

  • K8s 的API Server默认服务端口为8080(insecure-port)和6443(secure-port),8080端口提供HTTP服务,没有认证授权机制,而6443端口提供HTTPS服务,支持认证(使用令牌或客户端证书进行
  • B端设计指南 - 移动端

  • 「B 端产品真的需要移动端吗?」这个问题一直困扰着很多 B 端设计师,一方面国内的企业对于移动端产品都非常重视[1];另一方面设计移动端产品,特别是信息量如此大的移动端产品(B端

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • Javalin:一个轻量的 Web Framework

  • (给ImportNew加星标,提高Java技能)说起 Java 语言下的 Web 框架那就非 Spring Framework 不可了,但是今天在和别人在聊天的过程中发现了一个新奇的项目 Javalin。Javalin 是一个
  • Java 微服务随机掉线排查过程

  • (给ImportNew加星标,提高Java技能)背景我们的业务共使用 11 台(阿里云)服务器,使用 SpringcloudAlibaba 构建微服务集群, 共计 60 个微服务, 全部注册在同一个 Nacos 集群。流量转
  • 面试加分项:JVM 锁优化和逃逸分析详解

  • (给ImportNew加星标,提高Java技能)1 锁优化JVM 在加锁的过程中,会采用自旋、自适应、锁消除、锁粗化等优化手段来提升代码执行效率。1.1 自旋锁和自适应自旋现在大多的处理器都
  • 17 道微服务面试题

  • (给ImportNew加星标,提高Java技能)1、说说你对微服务有何了解微服务,又称微服务架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合。通俗地说,你必须看到
  • Spring Cloud 与响应式微服务

  • (给ImportNew加星标,提高Java技能)众所周知,Spring Cloud 服务间的调用方式是使用的 RESTful API,我们平时都是R estTemplate 或 Feign 来调用的,这两种方式其实说到底都是同步的
  • 云原生场景下实现编译加速

  • (给ImportNew加星标,提高Java技能)背景云原生下的流水线是通过启动容器来运行具体的功能步骤,每次运行流水线可能会被调度到不同的计算节点上。这会导致一个问题:容器运行完是不