Jetty 是 Eclipse 基金会下的一个开源项目,它是一款用Java实现的、基于标准的HTTP服务器和JAVA Servlet容器。其优秀的性能和强大的可配置性使其在构建复杂和大规模的应用程序中非常受欢迎。在此篇文章中,我们将深入了解 Jetty,以及它如何支持我们构建出众的应用。
Jetty 兼容JAVA Servlet API,这使得你可以在Jetty中部署所有的Servlet应用程序,接口兼容,无需做过多改动。
Jetty 可以被轻松地嵌入到各种应用和框架中,比如Spring Boot就自带Jetty作为其默认嵌入式服务器。这提供了极大的便利,满足了各种需要嵌入HTTP server的场景。
Jetty 的大部分组件都提供了丰富的配置选项,让开发人员可以根据自己的需求对它进行定制。而且,Jetty 的源码公开,开发人员还可以通过修改源码来实现特定的需求。
Jetty 对于网络连接和内存使用的高效管理,使得其在性能上非常突出。对于大量的并发连接,Jetty表现得十分出色。
Jetty Downloads | The Eclipse Foundation
Jetty 9.4.53 是 2021 年 7 月发布的,这是一个已经经历了一段时间的稳定性测试和社区反馈的版本。 Jetty 9.4.53 是一个相对成熟且包含许多功能更新和 bug 修复的版本,在实际项目中应用是可取的,但是具体是否适合你的项目,还需要结合上述因素进行考虑。
下载完之后,解压出来就可以了。接下来就到 idea 中去配置就可以使用了 。
下载完之后,重启 idea 就 OK 啦!可能有时候 idea 没有那么快识别到 jetty 插件,可能重启了也找不到 jetty 或者 是灰色的,大家重启多两次就好了 。
如果找不到 jetty 的话,需要在 idea 下载一个插件:jetty
这是我们自己下载的 jetty 版本,如果没有显示 jetty 本地下载的服务器怎么办呢?
点击 jetty home ,选择自己下载解压后的 jetty 文件即可,然后点击 OK 就可以了。
添加我们刚刚打成的 war 包。
任意选择一个就可以了,然后点击 OK!
这是配置完服务器后的路径:http://localhost:8080/ch01-1.0-SNAPSHOT/ 。
在访问路径 http://localhost:8080/ch01-1.0-SNAPSHOT/ 中,ch01-1.0-SNAPSHOT 是指你的web应用程序的上下文路径(context path),它是在web应用程序部署到服务器时指定的。通常,这个上下文路径和你的web应用程序的名称是一致的,但是也可以手动设置。
在这个访问路径的结尾处,还有一个斜杠“/”,表示这是一个目录,而不是一个具体的文件。如果你想访问这个目录下的具体文件,你需要在这个路径后面添加文件名。例如,如果你想访问 index.html 文件,你可以在路径后面添加 /index.html,使得访问路径变为 http://localhost:8080/ch01-1.0-SNAPSHOT/index.html。
所以,访问路径 http://localhost:8080/ch01-1.0-SNAPSHOT/ 后面会有一个斜杠和文件名,是因为这个路径指向的是一个目录,而不是一个具体的文件。
如果只要 http://localhost:8080/ 这个路径呢?
把这个勾上就可以了,这个是自定义上下文的根路径,勾选后 http://localhost:8080/ ,8080后面就不是 /ch01-1.0-SNAPSHOT/ 了,就变成 “/” 了。
例如,如果你想访问 index.html 文件,你可以在路径后面添加 /index.html,使得访问路径变为 http://localhost:8080/index.html。
IntelliJ IDEA 内置的 Jetty Server 在“On 'Update' action”选项中提供的四个选项:
Update resources:这个选项表示只更新静态资源(如 HTML、CSS、JavaScript 等),不重新加载应用程序。
Update classes and resources:这个选项表示更新静态资源和 Java 类文件,但不重新加载应用程序。
Redeploy:这个选项表示重新部署应用程序,包括重新加载所有的类和资源。
Restart server:这个选项表示自动重启 Jetty Server,以加载新的应用程序代码和资源。
这四个选项可以根据你的需求选择不同的操作。如果你只修改了静态资源,可以选择 Update resources 或 Update classes and resources;如果你修改了 Java 类文件,可以选择 Update classes and resources;如果你修改了 Jetty Server 的配置文件或更新了 Jetty Server 本身,可以选择 Restart server。
大家就根据自己的需要去设置吧。
IntelliJ IDEA 内置的 Jetty Server 在“On frame deactivation”选项中提供的三个选项:
Do nothing:这个选项表示不做任何操作,即不重新加载应用程序。
Update resources:这个选项表示只更新静态资源(如 HTML、CSS、JavaScript 等),不重新加载应用程序。
Update classes and resources:这个选项表示更新静态资源和 Java 类文件,但不重新加载应用程序。
这三个选项可以根据你的需求选择不同的操作。如果你只修改了静态资源,可以选择 Update resources;如果你修改了 Java 类文件,可以选择 Update classes and resources;如果你不想重新加载应用程序,可以选择 Do nothing。
这里使用的是 springmvc 来完成的 web 项目,就不讲解了,我给大家看运行的效果,大家可以在自己的项目中替换掉 tomcat ,使用 jetty 作为服务器,操作和用法都是一样的。
Tomcat 和 Jetty 都是 Java Web 应用程序服务器,它们的主要区别如下:
架构:Tomcat 和 Jetty 的架构不同。Tomcat 是一个传统的 Web 应用程序服务器,它的架构是基于 Servlet 和 JSP 规范的,它通过 Catalina 组件来处理 HTTP 请求和响应。Jetty 的架构是基于异步 IO 的,它通过 Jetty Server 组件来处理 HTTP 请求和响应。
性能:由于 Jetty 的架构是基于异步 IO 的,它比 Tomcat 在处理高并发请求时更加高效。Jetty 的性能优于 Tomcat,特别是在处理长连接和 WebSocket 请求时。
部署方式:Tomcat 和 Jetty 的部署方式不同。Tomcat 的部署方式是将 WAR 文件部署到 Tomcat 的 webapps 目录下,然后启动 Tomcat 服务器。Jetty 的部署方式是将 WAR 文件放到 Jetty 的 webapps 目录下,然后启动 Jetty 服务器。
功能:Tomcat 和 Jetty 的功能也有所不同。Tomcat 支持 JSP、Servlet、EL 等规范,以及一些常用的 Web 功能,如会话管理、安全性等。Jetty 也支持这些规范和功能,同时还支持 WebSocket、HTTP/2、异步 Servlet 等高级特性。
总的来说,Tomcat 是一个成熟的传统 Web 应用程序服务器,它的功能齐全,稳定性和安全性较高,适合用于大型 Web 应用程序的部署。Jetty 是一个轻量级、高性能的 Web 应用程序服务器,它的架构和设计更加先进,适合用于处理高并发请求、长连接和 WebSocket 等场景。
使用 Jetty 作为 Web 应用程序服务器有以下几个好处:
高性能:Jetty 的架构是基于异步 IO 的,它的性能优于传统的 Web 应用程序服务器,特别是在处理高并发请求、长连接和 WebSocket 等场景时更加高效。
轻量级:Jetty 是一个轻量级的 Web 应用程序服务器,它的代码量较少,部署和启动速度更快,占用的内存资源更少。
易于嵌入:Jetty 可以被嵌入到其他 Java 应用程序中,例如 Eclipse、Maven、Hadoop 等。这使得 Jetty 更加灵活和易于集成。
支持异步 Servlet:Jetty 支持异步 Servlet,使得 Web 应用程序可以更好地处理异步请求和响应。
支持 WebSocket:Jetty 支持 WebSocket,可以更好地处理实时数据和消息推送等场景。
支持 HTTP/2:Jetty 支持 HTTP/2,可以更好地处理大量请求和响应,提高 Web 应用程序的性能和效率。
总的来说,Jetty 是一个高性能、轻量级、易于嵌入的 Web 应用程序服务器,具有先进的架构和设计,支持异步 Servlet、WebSocket、HTTP/2 等高级特性,适合用于处理高并发请求、长连接和实时数据等场景。