1. 首页 > Tomcat教程 > 正文

Tomcat教程FG003-Tomcat 11核心特性与Jakarta EE 9.1兼容实战验证

目录大纲

Part01-基础概念与理论知识

1.1 Jakarta EE 9.1规范概述

Jakarta EE 9.1是Jakarta EE平台的重要版本,主要特点包括:

  • API包名从javax.*迁移到jakarta.*
  • 简化的API结构
  • 增强的安全性
  • 更好的性能
  • 支持Java SE 11+

Jakarta EE 9.1包含的核心规范:

  • Servlet 5.0
  • JSP 3.0
  • EL 4.0
  • WebSocket 2.0
  • CDI 3.0
  • JAX-RS 3.0

1.2 Tomcat 11核心特性

Tomcat 11的核心特性包括:

  • Servlet 6.0实现:支持最新的Servlet规范
  • JSP 4.0实现:增强的JSP引擎
  • EL 6.0实现:表达式语言的新特性
  • WebSocket 2.1支持:实时通信能力
  • Authentication 2.0支持:增强的安全认证
  • CDI和JAX-RS集成:更好的企业级特性支持
  • GraalVM原生镜像支持:提升启动速度和运行效率
  • HTTP/2和HTTP/3支持:现代化的网络协议
  • 增强的安全性:更好的安全防护
  • 性能优化:更高的吞吐量和更低的延迟

学习交流加群风哥微信: itpux-com

1.3 兼容性验证方法

验证Tomcat 11与Jakarta EE 9.1兼容性的方法:

  • 使用官方兼容性测试套件
  • 部署标准Jakarta EE应用
  • 验证API调用是否正常
  • 测试核心功能是否正常工作
  • 检查性能和稳定性

Part02-生产环境规划与建议

2.1 环境准备

环境准备要求:

  • Java SE 17或更高版本
  • Tomcat 11.0.8或更高版本
  • Maven 3.6.0或更高版本
  • IDE(如IntelliJ IDEA、Eclipse)
  • 数据库(如MySQL、PostgreSQL)

2.2 依赖管理

Maven依赖配置示例:

# pom.xml配置
<dependencies>
  <dependency>
    <groupId>jakarta.servlet</groupId>
    <artifactId>jakarta.servlet-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>jakarta.servlet.jsp</groupId>
    <artifactId>jakarta.servlet.jsp-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>jakarta.el</groupId>
    <artifactId>jakarta.el-api</artifactId>
    <version>6.0.0</version>
    <scope>provided</scope>
  </dependency>
</dependencies>

2.3 配置建议

Tomcat配置建议:

  • 设置合适的JVM参数
  • 配置线程池
  • 启用压缩
  • 配置连接超时
  • 设置会话超时
  • 启用访问日志

更多视频教程www.fgedu.net.cn

Part03-生产环境项目实施方案

3.1 项目搭建

# 使用Maven创建项目
mvn archetype:generate -DgroupId=com.fgedu -DartifactId=jakartaee-demo -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
[INFO] Scanning for projects…
[INFO] ————————————————————————
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ————————————————————————
[INFO]
[INFO] — maven-archetype-plugin:3.2.0:generate (default-cli) @ standalone-pom —
[INFO] Generating project in Batch mode
[INFO] —————————————————————————-
[INFO] Using following parameters for creating project from Archetype: maven-archetype-webapp:1.4
[INFO] —————————————————————————-
[INFO] Parameter: groupId, Value: com.fgedu
[INFO] Parameter: artifactId, Value: jakartaee-demo
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Parameter: package, Value: com.fgedu
[INFO] Parameter: packageInPathFormat, Value: com/fgedu
[INFO] Parameter: package, Value: com.fgedu
[INFO] Parameter: groupId, Value: com.fgedu
[INFO] Parameter: artifactId, Value: jakartaee-demo
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] Project created from Archetype in dir: /root/jakartaee-demo
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 2.345 s
[INFO] Finished at: 2026-04-10T10:00:00Z
[INFO] ————————————————————————

3.2 依赖配置

# 编辑pom.xml
vi jakartaee-demo/pom.xml
<project xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”
<modelVersion>4.0.0</modelVersion>
<groupId>com.fgedu</groupId>
<artifactId>jakartaee-demo</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>jakartaee-demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>jakartaee-demo</finalName>
</build>
</project>

3.3 应用部署

# 编译项目
cd jakartaee-demo && mvn clean package
[INFO] Scanning for projects…
[INFO] ————————————————————————
[INFO] Building jakartaee-demo Maven Webapp 1.0-SNAPSHOT
[INFO] ————————————————————————
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ jakartaee-demo —
[INFO] Deleting /root/jakartaee-demo/target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ jakartaee-demo —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ jakartaee-demo —
[INFO] Nothing to compile – all classes are up to date
[INFO]
[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ jakartaee-demo —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ jakartaee-demo —
[INFO] Nothing to compile – all classes are up to date
[INFO]
[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ jakartaee-demo —
[INFO] No tests to run.
[INFO]
[INFO] — maven-war-plugin:2.2:war (default-war) @ jakartaee-demo —
[INFO] Packaging webapp
[INFO] Assembling webapp [jakartaee-demo] in [/root/jakartaee-demo/target/jakartaee-demo]
[INFO] Processing war project
[INFO] Copying webapp resources [/root/jakartaee-demo/src/main/webapp]
[INFO] Webapp assembled in [1.234s]
[INFO] Building war: /root/jakartaee-demo/target/jakartaee-demo.war
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 3.456 s
[INFO] Finished at: 2026-04-10T10:05:00Z
[INFO] ————————————————————————

# 部署到Tomcat
cp target/jakartaee-demo.war /Tomcat/app/webapps/

from Tomcat视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 兼容性测试

# 查看Tomcat日志
tail -f /Tomcat/app/logs/catalina.out
10-Apr-2026 10:10:00.000 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/Tomcat/app/webapps/jakartaee-demo.war]
10-Apr-2026 10:10:00.000 INFO [Catalina-utility-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/Tomcat/app/webapps/jakartaee-demo.war] has finished in [1000] milliseconds

# 访问应用
curl -I http://localhost:8080/jakartaee-demo/
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Thu, 10 Apr 2026 02:10:00 GMT

4.2 核心特性验证

Servlet 6.0特性验证

# 创建测试Servlet
vi jakartaee-demo/src/main/java/com/fgedu/TestServlet.java
package com.fgedu;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(“/test”)
public class TestServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(“text/html”);
PrintWriter out = response.getWriter();
out.println(““);
out.println(“

Servlet 6.0 Test

“);
out.println(“

Hello from Jakarta EE 9.1!

“);
out.println(“”);
}
}

# 重新编译部署
mvn clean package && cp target/jakartaee-demo.war /Tomcat/app/webapps/

# 访问测试Servlet
curl http://localhost:8080/jakartaee-demo/test

Servlet 6.0 Test


Hello from Jakarta EE 9.1!


WebSocket 2.1特性验证

# 创建WebSocket端点
vi jakartaee-demo/src/main/java/com/fgedu/TestWebSocket.java
package com.fgedu;

import jakarta.websocket.OnMessage;
import jakarta.websocket.server.ServerEndpoint;
import jakarta.websocket.Session;

@ServerEndpoint(“/websocket”)
public class TestWebSocket {
@OnMessage
public String onMessage(String message) {
return “Echo: ” + message;
}
}

4.3 性能测试

# 使用ab进行性能测试
ab -n 1000 -c 100 http://localhost:8080/jakartaee-demo/test
This is ApacheBench, Version 2.3 <$Revision: 1879490 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests

Server Software: Apache-Coyote/1.1
Server Hostname: localhost
Server Port: 8080

Document Path: /jakartaee-demo/test
Document Length: 80 bytes

Concurrency Level: 100
Time taken for tests: 0.567 seconds
Complete requests: 1000
Failed requests: 0
Total transferred: 234000 bytes
HTML transferred: 80000 bytes
Requests per second: 1763.67 [#/sec] (mean)
Time per request: 56.700 [ms] (mean)
Time per request: 0.567 [ms] (mean, across all concurrent requests)
Transfer rate: 403.21 [Kbytes/sec] received

Connection Times (ms):
min mean[+/-sd] median max
Connect: 0 1 0.3 1 2
Processing: 5 50 10.2 48 80
Waiting: 2 30 8.1 28 60
Total: 5 51 10.3 49 81

Percentage of the requests served within a certain time (ms):
50% 49
66% 55
75% 58
80% 60
90% 65
95% 70
98% 75
99% 78
100% 81 (longest request)

4.4 故障排查

常见问题与解决方案

  • 依赖冲突:检查pom.xml中的依赖版本,确保使用jakarta.*包名
  • 编译错误:确保使用Java 17或更高版本,检查IDE配置
  • 部署失败:查看Tomcat日志,检查war包是否正确构建
  • 运行时错误:检查Servlet API调用是否符合规范

学习交流加群风哥QQ113257174

Part05-风哥经验总结与分享

5.1 兼容性最佳实践

  • 使用官方推荐的依赖版本
  • 确保所有依赖都使用jakarta.*包名
  • 定期更新Tomcat和依赖库版本
  • 使用Maven或Gradle管理依赖
  • 进行充分的兼容性测试

5.2 核心特性应用建议

  • Servlet 6.0:利用新的异步处理特性提升性能
  • WebSocket 2.1:用于实时通信场景
  • CDI:实现依赖注入,简化代码
  • JAX-RS:构建RESTful API
  • GraalVM支持:提升启动速度和运行效率

5.3 性能优化技巧

性能优化建议:

  • 启用HTTP/2提升传输效率
  • 使用连接池减少资源消耗
  • 启用压缩减少网络传输
  • 配置合适的线程池大小
  • 使用缓存减少重复计算

5.4 升级迁移建议

  • 从javax.*包名迁移到jakarta.*
  • 更新依赖库版本
  • 修改配置文件中的相关引用
  • 进行充分的测试验证
  • 制定详细的迁移计划

风哥提示:在升级到Tomcat 11和Jakarta EE 9.1时,建议先在测试环境进行充分验证,确保应用的兼容性和稳定性。

总结

本文详细介绍了Tomcat 11的核心特性以及与Jakarta EE 9.1的兼容性验证,包括规范实现、新特性解析、兼容性测试等内容。通过本文的学习,您应该对Tomcat 11的核心功能和技术优势有了全面的了解。

Tomcat 11作为实现Jakarta EE 10规范的容器,提供了许多新特性和性能改进,为企业级应用的开发和部署提供了更好的支持。在实际应用中,建议根据具体需求选择合适的配置和优化策略,充分发挥Tomcat 11的性能优势。

更多学习教程公众号风哥教程itpux_com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息