Eclipse 2021-06搭配Apache Tomcat 10新建动态Web项目时web.xml文件报错求助
解决Tomcat 10 + Eclipse动态Web项目web.xml版本报错问题
这个问题我之前帮同事排查过,核心原因是Tomcat 10和你用的旧版web.xml规范不兼容——Tomcat10已经切换到Jakarta EE的Servlet 5.0规范了,而你的web.xml还在用老的Java EE(javax)命名空间,版本设置不对,甚至schema路径还写错了,这几个问题凑在一起就导致了version="2.5"处的报错。
下面是具体的解决步骤:
1. 替换web.xml为适配Tomcat10的规范
直接把你的web.xml内容替换成以下代码,它完全适配Jakarta Servlet 5.0(对应Tomcat10)的要求:
<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="5.0" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"> <display-name>01Test</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
这里的关键变化:
- 命名空间从
http://java.sun.com/xml/ns/j2ee换成了Jakarta EE的https://jakarta.ee/xml/ns/jakartaee - 版本从
2.5改为5.0(对应Tomcat10的Servlet版本) - schema路径更新为Jakarta官方的5.0版本xsd地址
2. 修正Eclipse项目的Web模块版本
右键你的项目 → Properties → Project Facets:
- 找到
Dynamic Web Module,确保它的版本是5.0(和Tomcat10的Servlet版本对应) - 如果之前是旧版本,切换时Eclipse会提示是否更新配置文件,直接确认即可
3. 验证Tomcat10的Target Runtime配置
右键项目 → Properties → Target Runtime:
- 确保选中的是你配置的Tomcat 10.x实例,而不是其他版本的Tomcat
- 如果还没添加Tomcat10到Eclipse,点击
Add按钮,按照向导完成Tomcat10的配置
额外注意事项
Tomcat10和Tomcat9及以下的核心区别是:所有javax.*相关的包都换成了jakarta.*。所以后续你编写Servlet、Filter等组件时,要导入jakarta.servlet.*的包,而不是旧的javax.servlet.*,否则会出现类找不到的错误。
内容的提问来源于stack exchange,提问作者Guido Cavallini




