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

如何解决Sitemesh演示应用的404错误问题

排查SiteMesh应用JSP 404问题的思路与日志配置

先别急,咱们一步步拆解这个问题——你能访问index.html说明应用部署基本正常,但menu.jsp和hours.jsp报404,核心可能是路径不匹配或者配置规则没覆盖到请求,再结合日志排查就能定位问题:

一、先确认访问路径是否正确

从你的文件结构来看,menu.jsp和hours.jsp是放在WebContent/data/目录下的,但你访问的是localhost:8080/mesh/menu.jsp,正确的访问路径应该是:

localhost:8080/mesh/data/menu.jsp
localhost:8080/mesh/data/hours.jsp

直接访问根路径下的menu.jsp自然会报404,因为文件根本不在那里。另外你的decorators.xml里配置的<pattern>/data/*</pattern>也说明只有/data/下的页面才会被SiteMesh装饰,所以必须先访问正确的路径。

二、检查SiteMesh配置的有效性

先核对你的配置文件是否存在隐性问题:

1. web.xml配置

你的web.xml里SiteMesh过滤器的配置是正确的,url-pattern: /*会拦截所有请求,但要确保:

  • SiteMesh的jar包已经正确添加到WEB-INF/lib目录下(从文件结构看你已经加了,这点没问题)
  • 过滤器类com.opensymphony.sitemesh.webapp.SiteMeshFilter没有拼写错误

2. decorators.xml配置

你的装饰器规则是<pattern>/data/*</pattern>,这个规则只会匹配/data/开头的请求,所以如果访问非/data/路径的JSP,不会触发SiteMesh,但核心还是先确保文件路径和访问路径一致。

三、开启JBoss EAP的详细日志,追踪请求流向

控制台没有日志输出是因为默认日志级别太高,你可以修改JBoss的配置开启DEBUG级别的日志,看看请求到底有没有到达容器、有没有被SiteMesh处理:

  1. 打开JBoss EAP安装目录下的standalone/configuration/standalone.xml
  2. 找到<subsystem xmlns="urn:jboss:domain:logging:1.5">节点,添加以下日志配置:
<logger category="com.opensymphony.sitemesh">
    <level name="DEBUG"/>
</logger>
<logger category="org.apache.catalina">
    <level name="DEBUG"/>
</logger>
  1. 重启JBoss,再次访问报错的路径,控制台会输出详细的请求处理日志:
    • 可以看到请求是否被SiteMesh过滤器拦截
    • 可以看到容器是否尝试查找对应的JSP文件,以及查找的路径是什么

四、验证JSP是否被正确编译部署

JBoss会自动编译JSP文件到临时目录,你可以检查以下位置:
JBOSS_HOME/standalone/tmp/vfs/deployment/deployment[你的应用部署文件名]/WEB-INF/work/
看看是否存在menu_jsp.class和hours_jsp.class文件:

  • 如果不存在,说明JSP文件没有被编译,可能是文件权限问题,或者Eclipse部署时没有把data目录包含进去
  • 可以右键项目 → Properties → Deployment Assembly,确认data目录是否被添加到部署路径中

五、额外排查点

  • 检查JBoss EAP 6.4的JSP容器配置:确保standalone.xml中web子系统开启了JSP支持(默认是开启的,但可以核对)
  • 清理JBoss的临时文件:删除JBOSS_HOME/standalone/tmp和JBOSS_HOME/standalone/data/content下的内容,重新部署应用,避免缓存导致的问题

附:你的当前配置文件

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>mesh</display-name>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>

decorators.xml

<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/decorators">
<decorator name="basic-theme" page="basic-theme.jsp">
<pattern>/data/*</pattern>
</decorator>
</decorators>

文件结构

File layout

内容的提问来源于stack exchange,提问作者Aaron

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:08:16