Java 现在有哪些具备极简处理请求功能的 WebMVC 框架?

2020-06-06 14:04:56 +08:00
 tctc4869

目前很多 webMVc 框架,基本都要先写 Controller 类,然后注册或写注解,但对于现在的我来说,类似 Spring MVC 那一套衍生的开发体验不太好,不太利于开发者定制(相对于 node.js )。我想更简单地处理请求,直接用一个匿名类或函数式接口来处理所有的请求。因为越简单,就越容易定制。

比如下面这个: const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World'); });

这是 node.js 的官方网址里的某个演示,非常简单的请求处理,就一个函数来处理所有请求

HttpServer server = Vertx.vertx().createHttpServer(); Router router = Router.router(Vertx.vertx()); router.route().handler(request -> { request.response().end("post");

}); 还有 java 的 vert.x,不过这个是面向完全响应式开发,对个人和团队的响应式知识掌握,以及代码组织能力都有不小的要求。

基本有 request 和 response 两个形式参数,其中 response 封装返回视图,返回 body,下载文件,输出图片,设置响应状态码……等常用响应输出的方法。框架本身已经封装了 session 和静态资源处理。

除了 vert.x,还有哪些 java 框架有这个功能。

5812 次点击
所在节点    Java
64 条回复
zjsxwc
2020-06-06 19:55:13 +08:00
web 开发用 grails groovy 挺好的
iyangyuan
2020-06-07 00:22:52 +08:00
没看到有人推荐 Nutz,看来我真的老了😂
tctc4869
2020-06-07 00:23:42 +08:00
@yty2012g
@hantsy
我想可能搞错了什么,而且我要的并不是所谓的函数式接口来处理请求,我想要的是一个方法处理所有的请求,与函数式接口相差不大,匿名类就可以弄。在这个方法体内,我自己来处理 request 到 response 的流程。然后借助 MVC 框架本身自带的常用响应方式的代码封装,例如响应 body,响应一个视图以及模板渲染,响应文件下载,响应图片生成等,这些 MVC 框架基本都封装好了。而如果用 Servlet,可能还得重复写轮子。

我看了一下目前回复里发的 Spring MVC 的那个演示代码,我基本感觉写的很怪异,而且指明 GET,POST,都指明了请求方法,那就处理不了所有的请求了,代码风格好奇怪,感觉明明可以不用那么奇怪的开发风格。可能我没找到关键地方,在此之前,感觉还是回到 Spring MVC 的传统 Controller 来处理比较好。要么就是 vert.x 来做,至少 vert.x-web 写的不是那么难看,而且可以为一个方法配置处理所有的请求,就是很考验响应式编程代码组织能力。
tctc4869
2020-06-07 00:30:25 +08:00
@iyangyuan nutz 能做?目前为止,我在 nutz 文档中,没有找到含有“直接处理所有的请求”的配置方式说明。
gaius
2020-06-07 00:32:53 +08:00
你这个思路不得反射去调方法🐶
watzds
2020-06-07 00:41:32 +08:00
处理所有请求有啥好的,那用 filter 吧哈哈
TMaize
2020-06-07 01:01:29 +08:00
试试这个,不过不是标准的 servlet
https://lets-blade.com/
movistar
2020-06-07 02:11:30 +08:00
如果目标只是想接收所有的 HTTP 请求然后统一处理(类似 gateway 做中转,外加一点点简单逻辑这种场景)
有啥难的啊,现成的 web 框架把对应的 dispatcher 删了重写一个就完事了....
什么 HTTP 框架都好改,又不是不能改框架的源代码....

当然最好的方式当然是用 lua 写在 nginx 上,不过如果只熟悉 Java 技术栈,性能要求也不高的情况下,那都可以
roundgis
2020-06-07 03:14:12 +08:00
javalin
tsaohai
2020-06-07 04:07:43 +08:00
@hantsy #19 我也发现了这个问题,一直不知道怎么称呼这个东西 🤣 是不是就叫 sparkjava 。。。
cgpiao
2020-06-07 07:23:22 +08:00
Http4k
kidcats
2020-06-07 08:13:18 +08:00
ktor 貌似也不错
hantsy
2020-06-07 09:04:52 +08:00
@tctc4869 你可能 Java 8 的语法不熟悉吧。只是把处理的部分抽出来了而已。实际应用所有的代码放到一个方法,不现实。

Spring WebMvc 和 WebFlux 的 API 基本是一致的(当然是不同的实现),除了 MVC 不用 Reactor ( Mono, Flux ),而用传统的 Imperative APIs 外。
hantsy
2020-06-07 09:07:47 +08:00
@tctc4869 NodeJS Express 我也写,从来没把所有的逻辑放到一个方法里面,routes 也层层传递下去。放到一个方法(或者 Fun )里面只是做 Demo 的时候才用的。
hantsy
2020-06-07 09:11:03 +08:00
@cgpiao 这个货有一个系列,http 4X, 不过不怎么流行。

Spring 真正做到编程 Functional 化,我们期待 Spring Fu 吧,目前 0.3,我刚开始玩。

https://github.com/hantsy/spring-kotlin-dsl-sample/blob/master/kofu-reactive-mongo/src/main/kotlin/com/example/demo/DemoApplication.kt
realkenshinji
2020-06-07 09:47:26 +08:00
sparkjava ?
tt0411
2020-06-07 12:36:18 +08:00
sparkjava, 写简单的服务够用; 但是当服务复杂性上去后, 还是逐渐走向 spring boot
fanfpy
2020-06-07 13:09:11 +08:00
blade?
xcstream
2020-06-07 16:03:09 +08:00
jfinal
751762476
2020-06-07 16:34:32 +08:00
jooby
Micronaut
vertx
ktor

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/679162

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX