一、什么是Jetty
简单来讲,Jetty就是一个开源HTTP服务器和Servlet引擎,它可以为JSP和Servlet提供运行时环境。比如Java web应用最常用的Servlet容器Tomcat。由于其轻量、灵活的特性,Jetty也被应用于一些知名产品中,例如ActiveMQ、Maven、Spark、GoogleAppEngine、Eclipse、Hadoop等。
二、为什么使用Jetty
- 异步的Servlet,支持更高的并发量
- 模块化的设计,更灵活,更容易定制,也意味着更高的资源利用率
- 在面对大量长连接的业务场景下,Jetty默认采用的NIO模型是更好的选择
- 将Jetty嵌入到应用中,使一个普通应用可以快速支持HTTP服务
- Jetty比较适合微服务(轻量级)
三、Jetty的基本架构
Jetty的框架比较简单,核心组件主要是由Server和Handler组成。其中Server的Handler是其比较重要的一个数据模型,Jetty中所有的组件都是基于Handler来实现的。
Tomcat最顶层是Service,控制了服务器的整个生命周期,每一个Service由一个Container和多个Connector组成,形成一个独立完整的处理单元,对外请求。
Jetty的核心是Server,整体包含了多个Handle,还有一个Connector组成,Connector负责接受请求,将请求分配给一个队列去进行处理。
Jetty的架构设计要比tomcat的更清晰,简单。
Jetty的基本架构 Tomcat架构四、与Tomcat的对比
- Jetty比较容易贴合第三方框架,比如你可以直接用Spring配置一个Jetty服务器
- 直接将Jetty作为提供HTTP服务的组件,嵌入到应用中(SpringBoot也嵌入了Tomcat)
- Jetty是面向Handler的架构,而Tomcat是面向容器的架构
- Jetty默认采用NIO技术,而Tomcat默认是BIO
- Jetty高度模块化,可以很灵活的管理拓展组件,而Tomcat对其他组件的管理则相对困难
- Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。而且按需加载组件,减少了服务器的内存开销,内部默认采用NIO异步处理等特性提高了服务器性能。配置更加的灵活、简单、开发效率快、扩展性强。
- 从技术上来说的话,Jetty不是一个功能全面的J2EE服务器,缺少很多对J2EE功能的支持。而Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的请求服务。它自身扩展了大量的J2EE特性来满足各种企业项目应用的需求,对于很多的Java web项目来说,我们可能并不需要这么多高级特性,从一定程度上浪费了很多的资源。
五、Jetty使用
5.1 打开Jetty官网下载Jetty包
Jetty下载5.2 操作步骤
1、解压Jetty包
解压Jetty包2、打开cmd进入Jetty目录
3、执行 java -jar start.jar命令
执行 java -jar start.jar命令4、打开浏览器访问http://127.0.0.1:8080
404我们可以看到页面展示的Jetty的404界面,因为在我们的JETTY_HOME下面的webapps下面并没有任何应用,所以会显示该错误。Jetty为我们提供了一个基础应用,在JETTY_HOME的demo-base目录下面起动步骤:
1、进入JETTY_HOME/demo-base
2、打开cmd
3、执行java -jar ../start.jar
4、通过浏览器访问http://127.0.0.1:8080
由此,我们可以看到Jetty的欢迎界面,这样我们的Jetty的HelloWorld便完成了。
注意:与Tomcat一样,示例程序并不代表绝对安全,当你去生产环境搭建一个全新的服务器,记得把示例程序删除掉。
六、常用配置
- start.ini 服务起动配置项
- etc/xxx.xml Jetty服务相关配置
- modules/xxx.mod 模块相关配置
七、Jetty模块化
单体应用架构 微服务架构JDK9开始就支持了模块化,前端很多框架也是模块化的,按需加载,节约资源。
通过以下命令可以查看到所依赖的模块
java -jar ../start.jar --list-modules
image.png
八、异步Servlet
异步Servlet是Servlet3.0出来的新特性。在并发量较大的情况下,若一个Servlet处理较慢,则会导致所有Servlet需要排队等待之前的Servlet线程处理完后才能继续执行。在加入异步Servlet之后,可以在处理时间较长的Servlet中增加单独的工作线程专门处理该业务,然后Servlet线程继续处理其他的Servlet请求。
网友评论