1. Jetty应用服务器简介
Jetty是Eclipse基金会开源的Java HTTP服务器和Servlet容器,以其轻量级、高性能和可嵌入特性著称。Jetty广泛用于大型互联网应用、云平台和微服务架构,是Apache Spark、Hadoop、Google App Engine等项目的核心组件。更多学习教程www.fgedu.net.cn
Jetty核心特点
轻量级:核心jar包仅几百KB,启动快速
高性能:异步IO处理,支持高并发连接
可嵌入:可作为库嵌入到Java应用中
模块化:按需加载模块,灵活配置
WebSocket支持:完整的WebSocket规范实现
2. Jetty版本说明
Jetty提供多个版本,用户可根据需求选择。学习交流加群风哥微信: itpux-com
最新版本信息
Jetty 12.0.18:最新稳定版本,支持Jakarta EE 10
Jetty 12.0.16:稳定版本
Jetty 11.0.24:历史稳定版本,支持Jakarta EE 9
Jetty 10.0.24:历史稳定版本,支持Java EE 8
版本特性
12.x版本:支持Jakarta EE 10,需要Java 17+
11.x版本:支持Jakarta EE 9,需要Java 11+
10.x版本:支持Java EE 8,需要Java 11+
3. Jetty下载地址
Jetty可以从官方网站或Eclipse获取安装包。
官方下载地址
官方网站:https://jetty.org/download.html
Eclipse下载:https://download.eclipse.org/jetty/
文档中心:https://jetty.org/docs/jetty/
下载安装包
# cd /fgeudb/software
# wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/12.0.18/jetty-home-12.0.18.tar.gz
# 输出示例如下:
–2026-04-04 10:00:00– https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/12.0.18/jetty-home-12.0.18.tar.gz
Resolving repo1.maven.org… 199.232.196.209
Connecting to repo1.maven.org|199.232.196.209|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 31457280 (30M) [application/gzip]
Saving to: ‘jetty-home-12.0.18.tar.gz’
jetty-home-12.0.18.tar.gz 100%[===================>] 30.00M 12.5MB/s in 2.4s
2026-04-04 10:00:10 (12.5 MB/s) – ‘jetty-home-12.0.18.tar.gz’ saved
# 验证下载文件
# ls -lh jetty-home-12.0.18.tar.gz
-rw-r–r–. 1 root root 30M Apr 4 10:00 jetty-home-12.0.18.tar.gz
4. 环境准备
在安装Jetty之前,需要准备必要的系统环境和Java运行时。
系统要求
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
# 检查系统架构
# uname -m
x86_64
# 检查内存和磁盘空间
# free -h
total used free shared buff/cache available
Mem: 31G 2.1G 28G 8.5M 1.0G 28G
Swap: 15G 0B 15G
# df -h /fgeudb
Filesystem Size Used Avail Use% Mounted on
/dev/sdb1 500G 20G 480G 4% /fgeudb
# 安装JDK 17或更高版本(Jetty 12要求)
# yum install -y java-17-openjdk java-17-openjdk-devel
# 验证Java版本
# java -version
# 输出示例如下:
openjdk version “17.0.8” 2023-07-18 LTS
OpenJDK Runtime Environment 21.9 (build 17.0.8+9-LTS)
OpenJDK 64-Bit Server VM 21.9 (build 17.0.8+9-LTS, mixed mode, sharing)
# 配置JAVA_HOME
# vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# 使环境变量生效
# source /etc/profile.d/java.sh
# 创建Jetty用户和组
# groupadd -g 5014 jetty
# useradd -g jetty -u 5014 -d /home/jetty -s /bin/bash jetty
# 创建安装目录
# mkdir -p /fgeudb/jetty/{base,logs}
# chown -R jetty:jetty /fgeudb/jetty
5. TAR包安装实战
使用TAR包安装是最常见的方式,以下是详细步骤。学习交流加群风哥QQ113257174
步骤1:解压安装包
# cd /fgeudb/software
# tar -xzf jetty-home-12.0.18.tar.gz -C /fgeudb/
# 输出示例如下:
# 重命名目录
# mv /fgeudb/jetty-home-12.0.18 /fgeudb/jetty-home
# 查看目录结构
# ls -la /fgeudb/jetty-home/
total 48
drwxr-xr-x. 8 jetty jetty 4096 Apr 4 10:05 .
drwxr-xr-x. 3 root root 4096 Apr 4 10:00 ..
drwxr-xr-x. 2 jetty jetty 4096 Apr 4 10:05 bin
drwxr-xr-x. 2 jetty jetty 4096 Apr 4 10:05 demo-base
drwxr-xr-x. 2 jetty jetty 4096 Apr 4 10:05 etc
drwxr-xr-x. 2 jetty jetty 4096 Apr 4 10:05 lib
drwxr-xr-x. 2 jetty jetty 4096 Apr 4 10:05 modules
-rw-r–r–. 1 jetty jetty 5120 Apr 4 10:05 LICENSE.txt
-rw-r–r–. 1 jetty jetty 1024 Apr 4 10:05 NOTICE.txt
-rw-r–r–. 1 jetty jetty 2048 Apr 4 10:05 README.md
# 设置权限
# chown -R jetty:jetty /fgeudb/jetty-home
步骤2:创建Jetty Base目录
# su – jetty
# 创建Jetty Base目录
$ mkdir -p /fgeudb/jetty/base
# 初始化Jetty Base
$ cd /fgeudb/jetty/base
$ java -jar /fgeudb/jetty-home/start.jar –create-startd
# 输出示例如下:
INFO : Created /fgeudb/jetty/base/start.d
INFO : Created /fgeudb/jetty/base/start.ini
# 启用必要模块
$ java -jar /fgeudb/jetty-home/start.jar –add-modules=http,deploy,jsp
# 输出示例如下:
INFO : Enabled module http
INFO : Enabled module deploy
INFO : Enabled module jsp
INFO : Created /fgeudb/jetty/base/start.d/http.ini
INFO : Created /fgeudb/jetty/base/start.d/deploy.ini
INFO : Created /fgeudb/jetty/base/start.d/jsp.ini
# 查看启用的模块
$ java -jar /fgeudb/jetty-home/start.jar –list-modules
# 输出示例如下:
Enabled Modules:
http
deploy
jsp
server
servlet
servlets
webapp
步骤3:配置Jetty
$ vi /fgeudb/jetty/base/start.d/http.ini
# HTTP服务器配置
jetty.http.host=0.0.0.0
jetty.http.port=8080
jetty.http.idleTimeout=30000
# 保存配置文件
# 编辑JVM配置
$ vi /fgeudb/jetty/base/start.ini
# JVM参数
–exec
-Xms2g
-Xmx4g
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
# 保存配置文件
# 创建webapps目录
$ mkdir -p /fgeudb/jetty/base/webapps
步骤4:启动Jetty
$ cd /fgeudb/jetty/base
$ java -jar /fgeudb/jetty-home/start.jar
# 输出示例如下:
2026-04-04 10:10:00.000:INFO :oejs.Server:main: jetty-12.0.18; built: 2025-03-04T07:52:00.000Z; git: abc123def; jvm 17.0.8+9-LTS
2026-04-04 10:10:01.000:INFO :oejs.AbstractConnector:main: Started ServerConnector@12345678{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
2026-04-04 10:10:01.000:INFO :oejs.Server:main: Started oejs.Server@87654321{STARTING}[12.0.18,sto=0] @1234ms
# 检查进程
$ ps -ef | grep jetty
jetty 12345 1 5 10:10 pts/0 00:00:10 /usr/lib/jvm/java-17-openjdk/bin/java -jar /fgeudb/jetty-home/start.jar
# 检查端口
$ netstat -tlnp | grep java
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 12345/java
步骤5:配置systemd服务
# vi /etc/systemd/system/jetty.service
[Unit]
Description=Jetty Application Server
After=network.target
[Service]
Type=simple
User=jetty
Group=jetty
Environment=”JAVA_HOME=/usr/lib/jvm/java-17-openjdk”
Environment=”JETTY_HOME=/fgeudb/jetty-home”
Environment=”JETTY_BASE=/fgeudb/jetty/base”
ExecStart=/usr/lib/jvm/java-17-openjdk/bin/java -jar /fgeudb/jetty-home/start.jar jetty.state=/fgeudb/jetty/base/jetty.state
ExecStop=/usr/lib/jvm/java-17-openjdk/bin/java -jar /fgeudb/jetty-home/start.jar jetty.state=/fgeudb/jetty/base/jetty.state –stop
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
[Install]
WantedBy=multi-user.target
# 重新加载systemd
# systemctl daemon-reload
# 启动Jetty服务
# systemctl start jetty
# 设置开机自启
# systemctl enable jetty
# 输出示例如下:
Created symlink from /etc/systemd/system/multi-user.target.wants/jetty.service to /etc/systemd/system/jetty.service.
# 检查服务状态
# systemctl status jetty
● jetty.service – Jetty Application Server
Loaded: loaded (/etc/systemd/system/jetty.service; enabled)
Active: active (running) since Fri 2026-04-04 10:15:00 CST; 10s ago
Main PID: 12345 (java)
CGroup: /system.slice/jetty.service
└─12345 /usr/lib/jvm/java-17-openjdk/bin/java -jar …
6. Docker容器安装实战
使用Docker容器安装Jetty是最快捷的方式,适合快速测试和开发环境。更多学习教程公众号风哥教程itpux_com
步骤1:拉取Jetty镜像
# docker pull jetty:12.0.18-jdk17
# 输出示例如下:
12.0.18-jdk17: Pulling from library/jetty
f1f26f570256: Pull complete
8f8e43ef9c3a: Pull complete
e9d8dca5b8a5: Pull complete
a1b8d4c4a5e6: Pull complete
Digest: sha256:abc123def456…
Status: Downloaded newer image for jetty:12.0.18-jdk17
docker.io/library/jetty:12.0.18-jdk17
# 查看镜像
# docker images | grep jetty
jetty 12.0.18-jdk17 abc123def456 2 weeks ago 450MB
步骤2:运行Jetty容器
# mkdir -p /fgeudb/jetty/{webapps,logs}
# 运行Jetty容器
# docker run -d \
–name jetty \
-p 8080:8080 \
-v /fgeudb/jetty/webapps:/var/lib/jetty/webapps \
-v /fgeudb/jetty/logs:/var/lib/jetty/logs \
-e JAVA_OPTIONS=”-Xms2g -Xmx4g” \
jetty:12.0.18-jdk17
# 输出示例如下:
abc123def456789…
# 检查容器状态
# docker ps | grep jetty
abc123def456 jetty:12.0.18-jdk17 “/docker-entrypoint.…” 10 seconds ago Up 9 seconds 0.0.0.0:8080->8080/tcp jetty
# 查看容器日志
# docker logs jetty
# 输出示例如下:
2026-04-04 10:20:00.000:INFO :oejs.Server:main: jetty-12.0.18; built: 2025-03-04T07:52:00.000Z
2026-04-04 10:20:01.000:INFO :oejs.AbstractConnector:main: Started ServerConnector@12345678{HTTP/1.1}{0.0.0.0:8080}
2026-04-04 10:20:01.000:INFO :oejs.Server:main: Started oejs.Server@87654321{STARTING}[12.0.18] @1234ms
7. Jetty配置优化
以下是生产环境的Jetty配置优化建议。
JVM配置优化
$ vi /fgeudb/jetty/base/start.ini
# JVM内存配置
–exec
-Xms4g
-Xmx8g
-XX:MetaspaceSize=512m
-XX:MaxMetaspaceSize=1g
# GC配置
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:ParallelGCThreads=8
-XX:ConcGCThreads=2
# 性能配置
-XX:+UseStringDeduplication
-XX:+OptimizeStringConcat
-XX:+UseCompressedOops
# 日志配置
-Xlog:gc*:file=/fgeudb/jetty/logs/gc.log:time,tags
# 保存配置文件
线程池配置
$ vi /fgeudb/jetty/base/start.d/jetty-threadpool.ini
# 线程池配置
jetty.threadPool.minThreads=10
jetty.threadPool.maxThreads=200
jetty.threadPool.idleTimeout=60000
jetty.threadPool.reservedThreads=2
# 保存配置文件
# 编辑HTTP配置
$ vi /fgeudb/jetty/base/start.d/http.ini
# HTTP服务器配置
jetty.http.host=0.0.0.0
jetty.http.port=8080
jetty.http.idleTimeout=30000
jetty.http.soLingerTime=0
jetty.http.acceptorThreads=-1
jetty.http.selectorThreads=-1
jetty.http.acceptQueueSize=0
# 保存配置文件
启用SSL/HTTPS
$ java -jar /fgeudb/jetty-home/start.jar –add-modules=ssl,https
# 输出示例如下:
INFO : Enabled module ssl
INFO : Enabled module https
# 创建SSL配置
$ vi /fgeudb/jetty/base/start.d/ssl.ini
jetty.ssl.host=0.0.0.0
jetty.ssl.port=8443
jetty.ssl.idleTimeout=30000
jetty.sslContext.keyStorePath=/fgeudb/jetty/base/etc/keystore.p12
jetty.sslContext.keyStorePassword=YourPassword123!
jetty.sslContext.keyManagerPassword=YourPassword123!
# 保存配置文件
# 创建自签名证书
$ keytool -genkeypair -alias jetty -keyalg RSA -keysize 2048 \
-storetype PKCS12 -keystore /fgeudb/jetty/base/etc/keystore.p12 \
-validity 365 -storepass YourPassword123! \
-dname “CN=fgedu.net.cn, OU=IT, O=, L=Beijing, ST=Beijing, C=CN”
# 输出示例如下:
Warning: The PKCS12 keystore is non-proprietary format.
Certificate stored in keystore
8. 安装验证与测试
安装完成后,需要进行验证测试确保Jetty正常运行。
访问默认页面
# URL: http://192.168.1.51:8080/
# Jetty默认页面显示:
# – Jetty版本信息
# – 服务器状态
# – 已部署的应用列表
# – 文档链接
# 如果没有部署应用,显示404页面
# 404 – Not Found
“`
使用命令行工具
$ cd /fgeudb/jetty/base
$ java -jar /fgeudb/jetty-home/start.jar –status
# 输出示例如下:
Jetty is running with pid 12345
# 查看版本
$ java -jar /fgeudb/jetty-home/start.jar –version
# 输出示例如下:
Jetty Version: 12.0.18
Jetty Home: /fgeudb/jetty-home
Jetty Base: /fgeudb/jetty/base
Java Version: 17.0.8
Java Home: /usr/lib/jvm/java-17-openjdk
# 查看配置
$ java -jar /fgeudb/jetty-home/start.jar –dry-run
# 输出示例如下:
/usr/lib/jvm/java-17-openjdk/bin/java -Djetty.base=/fgeudb/jetty/base -Djetty.home=/fgeudb/jetty-home -jar /fgeudb/jetty-home/start.jar
# 停止Jetty
$ java -jar /fgeudb/jetty-home/start.jar –stop
# 输出示例如下:
Stopping Jetty: OK
部署测试应用
$ mkdir -p /fgeudb/jetty/base/webapps/test/WEB-INF
# 创建web.xml
$ vi /fgeudb/jetty/base/webapps/test/WEB-INF/web.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app version=”5.0″ xmlns=”https://jakarta.ee/xml/ns/jakartaee”>
<display-name>Test Application</display-name>
</web-app>
# 创建测试JSP
$ vi /fgeudb/jetty/base/webapps/test/index.jsp
<%@ page language=”java” contentType=”text/html; charset=UTF-8″%>
<!DOCTYPE html>
<html>
<head>
<title>Jetty Test</title>
</head>
<body>
<h1>Jetty 12.0.18 Test Page</h1>
<p>Server: <%= application.getServerInfo() %></p>
<p>Java Version: <%= System.getProperty(“java.version”) %></p>
</body>
</html>
# 重启Jetty加载应用
$ systemctl restart jetty
# 访问测试应用
# URL: http://192.168.1.51:8080/test/
# 输出示例如下:
Jetty 12.0.18 Test Page
Server: jetty/12.0.18
Java Version: 17.0.8
REST API测试
$ curl -I http://192.168.1.51:8080/test/
# 输出示例如下:
HTTP/1.1 200 OK
Server: jetty/12.0.18
Content-Type: text/html;charset=utf-8
Content-Length: 285
Date: Fri, 04 Apr 2026 10:30:00 GMT
# 测试HTTPS
$ curl -k -I https://192.168.1.51:8443/test/
# 输出示例如下:
HTTP/1.1 200 OK
Server: jetty/12.0.18
Content-Type: text/html;charset=utf-8
Content-Length: 285
Date: Fri, 04 Apr 2026 10:30:00 GMT
# 查看服务器统计信息
$ curl http://192.168.1.51:8080/stats
# 输出示例如下:
{
“server”: {
“version”: “12.0.18”,
“uptime”: 3600,
“threads”: {
“active”: 10,
“idle”: 190,
“max”: 200
},
“connections”: {
“active”: 5,
“idle”: 20
}
}
}
至此,Jetty应用服务器的下载和安装已完成。后续可以根据实际业务需求部署应用、配置数据源和优化性能。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
