微信优化

weixinyouhua

如何安装与配置Jetty,有哪些详细步骤?

2026-08-26 16:59:52

Jetty是什么?为什么它比Tomcat更轻量

Jetty是一款由Eclipse基金会维护的开源Java Web服务器和Servlet容器,以体积小、启动快、嵌入性强著称,在微服务架构和云原生场景下,多数情况下比Tomcat更节省资源。

很多朋友第一次接触Jetty时都会问:它不是个IDE吗?其实Eclipse Jetty和Eclipse IDE是两回事,Jetty是一个可以独立运行的Web服务器,也可以作为库嵌入到你的Java程序中,业内专家指出,Jetty的设计哲学就是“够用就好”,它不像Tomcat那样追求大而全,而是把核心功能做到极致精简。

用一个场景来说明:假设你的服务器只有2G内存,部署一个Spring Boot应用,用Tomcat可能占用400MB,而Jetty只需要200MB左右,这意味着同样的硬件配置,你能多跑几个服务实例,对于追求成本控制的中小团队来说,这个优势相当实在。

Jetty下载安装完整步骤与JDK版本要求

前置条件:确认JDK版本

Jetty 11及以上版本要求JDK 11+,Jetty 12已经支持到JDK 17和JDK 21,安装前先执行命令确认环境:

java -version

如果输出类似“openjdk version 17.0.8”,说明环境满足要求,如果版本太低,需要先安装对应版本的JDK。

下载与解压:从官网获取发行包

Jetty官方提供两种发行包:标准版(Standard)和模块化版(Modules),生产环境推荐使用标准版,它预置了常用模块,下载步骤如下:

  • 打开Eclipse Jetty官网(jetty.org),进入“Download”页面
  • 选择最新的稳定版本(当前稳定版为Jetty 12系列)
  • 下载.tar.gz压缩包(Linux/macOS)或.zip压缩包(Windows)
  • 将压缩包上传至服务器并解压
tar -zxvf jetty-12.0.14.tar.gz
mv jetty-12.0.14 /usr/local/jetty

启动与停止:一条命令搞定

Jetty的启动命令非常简洁,进入安装目录后执行:

cd /usr/local/jetty
java -jar start.jar

默认监听8080端口

如何安装与配置Jetty,有哪些详细步骤?

,启动完成后浏览器访问http://服务器IP:8080,看到Jetty的欢迎页面就算安装成功,停止服务时直接按Ctrl+C,或者使用jstack定位进程后kill。

Jetty配置详解:端口、JVM参数与虚拟主机

修改端口:从8080到自定义端口

默认端口是8080,但生产环境往往需要改成80或443,Jetty的端口配置在start.d目录下的http.ini文件中,打开后找到jetty.http.port这一行:

jetty.http.port=80

改完后重启Jetty,注意Linux下使用1024以下端口需要root权限,或者通过setcap命令赋予Java二进制文件绑定低端口的权限。

内存与GC调优:避免频繁Full GC

Jetty默认的JVM参数比较保守,高并发场景下需要手动调整,编辑bin/jetty.sh文件,找到JAVA_OPTIONS变量,添加以下参数:

JAVA_OPTIONS="-Xms1g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"

其中-Xms1g指定初始堆大小,-Xmx2g指定最大堆大小,G1GC是适合多核服务器的垃圾回收器。

虚拟主机配置:一台服务器跑多个站点

Jetty支持在同一实例上配置多个虚拟主机,在webapps目录下创建多个应用目录,然后在start.d目录的jetty.xml中增加VirtualHost配置:

<Set name="virtualHosts">
  <Array type="java.lang.String">
    <Item>www.example1.com</Item>
    <Item>www.example2.com</Item>
  </Array>
</Set>

这样同一个IP的不同域名就能访问不同的应用。

Jetty和Tomcat哪个好?生产环境选型对比

这是Jetty配置教程里被问得最多的问题,行业共识认为,两者没有绝对的优劣,关键看应用场景。

如何安装与配置Jetty,有哪些详细步骤?

对比维度 Jetty Tomcat
启动速度 秒级启动 秒级启动,略慢
内存占用 较低 较高
配置复杂度 模块化,简洁 XML配置,稍繁琐
嵌入支持 极佳,专为嵌入设计 支持,但代码相对复杂
集群能力 依赖外部方案 原生支持较完善
社区活跃度 活跃 非常活跃

从实际使用场景来看:

  • 微服务场景:Spring Boot默认内嵌的Web容器就是Tomcat,但也可以切换到Jetty,切换后启动速度快约30%
  • 高并发IO密集场景:Jetty的NIO模型比Tomcat的BIO模型更高效,能支撑更多并发连接
  • 传统企业应用:如果项目依赖JSP、JSF等Java EE规范,Tomcat兼容性更好

生产环境Jetty配置的常见问题排查

启动报错“Address already in use”

这个错误说明端口被占用,先用lsof -i:8080查看哪个进程占用了端口,找到PID后kill掉,或者直接修改http.ini换个端口。

访问403错误:目录权限问题

Jetty默认只允许访问webapps目录下的应用,如果403可能是应用目录权限不足,检查目录所有者和权限:

chown -R jetty:jetty /usr/local/jetty/webapps/
chmod -R 755 /usr/local/jetty/webapps/

修改配置不生效的排查思路

改完配置后记得先停止再启动,而不是用restart命令,Jetty有些模块的配置在启动时才加载,热重启不一定能生效。

Jetty配置HTTPS证书的两种方式

使用JDK自带的keytool生成自签名证书

开发环境测试HTTPS时,可以用keytool快速生成证书:

keytool -genkeypair -alias jetty -keyalg RSA -keysize 2048 -validity 365 -keystore keystore.jks

然后将生成的keystore.jks放到Jetty的etc目录下,在start.d目录创建ssl.ini文件并添加:

jetty.ssl.keystore.path=etc/keystore.jks
jetty.ssl.keystore.password=你的密码
jetty.ssl.keymanager.password=你的密码

配置正式SSL证书

如何安装与配置Jetty,有哪些详细步骤?

正式环境建议使用云厂商的免费证书(如简米云、酷番云每年可免费申请20张),拿到证书后需要转换为PKCS12格式,因为Jetty 12默认使用PKCS12:

openssl pkcs12 -export -in cert.pem -inkey key.pem -out cert.p12 -name jetty

然后在ssl.ini中指定PKCS12文件和密码,重启服务即可。

提升Jetty性能的三个关键设置

线程池调整:避免线程饥饿

Jetty默认线程池大小为200,高并发下需要调整,在start.ini中添加:

jetty.threadPool.maxThreads=500
jetty.threadPool.minThreads=50

开启HTTP/2协议

HTTP/2能显著提升页面加载速度,在start.ini中启用HTTP/2模块:

java -jar start.jar --add-modules=http2

然后配置http2.ini,监听同端口即可。

启用Gzip压缩

在webapps目录的WEB-INF/web.xml中添加Gzip过滤器,减少传输体积:

<filter>
  <filter-name>GzipFilter</filter-name>
  <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class>
</filter>

Jetty安装配置常见问题解答

Jetty启动报错“java.lang.UnsupportedClassVersionError”怎么解决?

这是JDK版本不匹配的问题,检查你安装的JDK版本是否满足Jetty版本的要求,Jetty 11需要JDK 11+,Jetty 12需要JDK 17+,建议直接安装JDK 17或JDK 21,兼容性最好。

Jetty能直接部署war包吗?

可以,Jetty兼容标准的war包部署方式,将war包拷贝到webapps目录下,启动时会自动解压并部署,与Tomcat的部署逻辑基本一致,没有额外学习成本。

Jetty在Windows下安装和Linux下有什么差别?

Windows下需要先配置JAVA_HOME环境变量,然后双击start.jar或在命令行执行同样的java -jar start.jar命令,需要注意Windows防火墙默认会拦截外部访问,需要在防火墙设置中放行Jetty使用的端口,其他配置步骤和Linux完全一致。

相关文章

2024年,SaaS软件行业碰到获客难、增长慢等问题吗?

我们努力让每一次邂逅总能超越期待