You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat6迁移至Tomcat7时默认与JSP servlet请求返回404问题咨询

排查步骤

1. 检查应用web.xml的根配置

  • 确认<web-app>标签的版本声明符合Servlet 3.0规范,错误的旧版本DTD声明会触发Tomcat兼容模式,导致全局配置继承异常:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  version="3.0">
  • 检查是否配置了<metadata-complete>true</metadata-complete>,该属性会强制Tomcat仅读取应用自身web.xml的配置,跳过全局conf/web.xml的内容合并,可暂时改为false或删除该配置测试。

2. 排查注解类的隐式配置覆盖

Servlet 3.0支持通过@WebServlet、@WebFilter注解注册组件,你此前仅删除了应用web.xml中的显式配置,未覆盖依赖Jar包中的注解类:

  • 临时在conf/catalina.properties中添加配置org.apache.catalina.core.StandardContext.ANNOTATION_SCAN_DISABLED=true,禁用所有注解扫描后重启Tomcat测试。
  • 如果问题解决,说明存在Jar包中的注解类注册了urlPatterns="/"或urlPatterns="/*"的Servlet/Filter,覆盖了全局default、jsp Servlet的映射,可通过<absolute-ordering>标签限定扫描范围或排除对应Jar包解决。

3. 开启调试日志确认映射加载情况

修改conf/logging.properties,添加如下配置开启Servlet映射加载日志:

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE

重启Tomcat后查看localhost.yyyy-MM-dd.log,对比正常/异常应用启动时的Servlet映射列表:

  • 确认异常应用是否存在default Servlet的/映射、jsp Servlet的*.jsp/*.jspx映射
  • 确认是否存在优先级更高的/*路径映射拦截了静态资源、JSP请求(Servlet映射优先级:精确匹配>路径匹配>扩展名匹配>缺省Servlet)

4. 排查Context类加载与配置

检查异常应用META-INF/context.xml、Tomcat全局conf/context.xml、conf/server.xml中对应Context的配置:

  • 确认未配置delegate="true"导致JSP Servlet类加载异常
  • 确认未配置defaultServletName、jspServletName参数覆盖了全局默认Servlet名称

5. 差异化对比定位问题

  • 将正常应用的web.xml完全替换异常应用的web.xml,测试是否恢复,逐步替换配置项定位异常配置
  • 若web.xml替换后仍异常,将正常应用的WEB-INF/lib目录替换异常应用的lib目录,逐步排查是否为依赖Jar包差异导致

6. JSF(*.xhtml)专属排查

确认异常应用的JSF依赖版本与正常应用一致,Tomcat7本身不自带JSF实现,需确保jsf-api、jsf-impl包已打入WAR包,且FacesServlet的*.xhtml映射未被其他配置覆盖。


内容的提问来源于stack exchange,提问作者Dani Rodríguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 04:24:05