现在的各种服务端框架比如 structs springmvc springboot 等都是运行在 serverlet 容器里的
为什么不脱离 serverlet 一个框架本身就是一个 server,监听 http 请求 业务逻辑部分只需要编写 controller 就行了
类似 golang 的那种方式,一个服务打包好后就是一个 server,业务逻辑也被打包进去了
当然感觉是历史问题,毕竟 serverlet 这种形式也满足需求
现在的各种服务端框架比如 structs springmvc springboot 等都是运行在 serverlet 容器里的
为什么不脱离 serverlet 一个框架本身就是一个 server,监听 http 请求 业务逻辑部分只需要编写 controller 就行了
类似 golang 的那种方式,一个服务打包好后就是一个 server,业务逻辑也被打包进去了
当然感觉是历史问题,毕竟 serverlet 这种形式也满足需求
1
guyeu Jun 15, 2020
你可以把 servlet 理解成一个标准,这个标准的定义很简单,就是这个接口:javax.servlet.Servlet,总共五个方法,不脱离这个 servlet 的原因很简单,生态在这儿 ,你想和这个生态对接,就得尊重人家的标准。
我猜你的 servlet 是类似 tomcat 、undertow 的 web 容器,那显然是可以脱离这种 web 容器的,别的不说,基于 netty 的 web server 一抓一大把,像 spring webflux,vertx 都是很香的东西。 |
2
xizismile Jun 15, 2020 via Android
servlet 只是一种规范,tomcat 只是 servlet 容器的一种实现方式
脱离了 servlet,你就得自己定义一套规范了。 既然已经有了 servlet,生态也是很成熟的,你为啥要自己重新定义一套新的呢? |
3
6IbA2bj5ip3tK49j Jun 15, 2020
问题本身就不完全正确。
就算是 servlet 也可以把容器嵌到程序里去 而且现在的 spring boot webflux,vert.x 已经不是 servlet 了。 |
6
jinsongzhao Jun 15, 2020 via Android
基于 servlet 也可以打包进一个可执行 jar 包,2007 年主要嵌入模式为主的 jetty 就很流行了,大概相当 tomcat 的 80%占有率。
|
7
saberlong Jun 15, 2020 via Android
我们公司就脱离了。netty 通信加 http 协议解析就好了。
|
8
zsdroid Jun 15, 2020
那么问题来了,Java 服务端开发为什么不脱离框架,用原生 java 手撸呢
|
9
nicevar Jun 15, 2020
这个个人用户专享包的逻辑亮了, 点击一键免费领取, 未认证前提示认证才能领取, 认证完成后提示"您已完成实名认证无法领取实名认证大礼包", 哈哈.
|
10
nicevar Jun 15, 2020
原来是服务器延时...
|
11
qwerthhusn Jun 15, 2020
Servlet 是一个协议
一些软件实现了这些协议,所以项目可以在 tomcat 跑,也可以在例如 jetty 或 undertow 等只要实现了 servlet 规范的服务器跑 开发人员只要使用 Servlet API 去处理 HTTP 请求就行了,当然那种比较原始,所以有 JAX-RS 、Spring MVC 这些进一步包装了 Servlet API 不过现在新的一些东西,像 WebFlux,Vert.X 这些就不实现 Servlet 了,自行实现 Http 服务(一般用 Netty )然后自行定义 API (类似 Servlet 那样)给用户使用 |
12
Cbdy Jun 15, 2020 via Android
Sprint WebFlux 、Vert.x Web 、
|
13
MarkLeeyun Jun 15, 2020 你的 servlet 都打错了。。。
|
14
glaucus Jun 15, 2020 via iPhone
why not?不要为了改变而改变
|
15
misaka19000 Jun 15, 2020
一个协议而已,包含了一些标准,有现成的标准不用干嘛要自己发明一套轮子?而且还不兼容各大 HTTP 服务容器
|
16
zhuangzhuang1988 Jun 15, 2020
|
17
CoderGeek Jun 16, 2020
我还记得 ejb 那套 weblogic jetty
|
19
szq8014 Jun 16, 2020
servlet 只是一个规范,代表的是 java 中 [同步阻塞] 模型的生态,很多框架会在这个限定下进行工作,比如同步阻塞最典型的就是一个线程从头干到尾,假如想暂存一个数据的话用 ThreadLocal 就可以了,不会出意外。但是你如果切换到基于事件驱动的那样的实现中就会出问题。
|
20
BBCCBB Jun 16, 2020
如果每个公司都是一套不同的东西. 那大家还怎么玩.
|
21
monkeyWie Jun 16, 2020
放在当下是有点笨重啊,但是在以前那个年代,java 就靠着 servlet 规范才从 web 开发中突出重围,百花齐放啊。
|
23
zzzmh Jun 16, 2020
按照这思路,干脆脱离 java 得了,用 c 重写一套语言,专门跑 web 项目
|
24
whenwind Jun 16, 2020
轻量的我是喜欢用 nanohttpd,跑在 android 上面
|
25
hantsy Jun 16, 2020
Servlet 只是 Java EE/Jakarta EE 的一种规范,事实证明,Servlet 可能是所有规范中影响力最大的规范,是 Java EE 体系中最成功的规范。
目前不用 Servlet 的也大把。Netty 是典型代表,ReactiveStreams 流行起来后,很多第三方框架都是基于 netty 的作品。Spring WebFlux 在 Spring Boot 中默认启用 Netty 作为服务器,当然也可以使用 Tomat,Jetty,Undertow 。 |
26
xuanbg Jun 16, 2020
你为什么要用 TCP/IP 协议,自己搞一套不好吗?当然不好!没有标准,自行其是,哪来的互联互通。
|
28
Narcissu5 Jun 17, 2020
springboot 打包完就是一个 executable jar 啊,楼主你的痛点究竟在哪里
|
29
yizmaoaa Jun 17, 2020
Vert.x Webflux micronaut quarkus
|
30
yizmaoaa Jun 17, 2020
Servlet 本来就是很久以前定义的东西,放在现在看来是不合适,而且麻烦了。
以前定 Servlet 的 interface 的时候,就是想让各家自己去搞底下的 IO 层。然后用户可以随便换 放到现在来看,Servlet 的规范设计很明显是麻烦且不够直观了。 这也就是为何这几年都开始将协议 IO 处理交给 netty 的原因了。 |
32
ychost Jul 2, 2020
netty 就好了
|
33
yamasa Sep 15, 2020
spring 这些难道就不是一个 jar 或者 war 打好了就是一个服务?人间迷惑行为。
|