【发布时间】:2015-03-27 00:37:50
【问题描述】:
我的 java web 应用程序(java 6 和 tomcat 6)有问题,我不知道如何解决:
在 servlet 中,我将请求转发给 JSP。该 JSP 包括其他一些 JSP。尽管没有任何改变并且 JSP 文件仍然存在,但有时会找不到这些 JSP 之一。无法找到包含的哪些 JSP 似乎是完全随机的。 servlet 中抛出以下异常:
Exception: org.apache.jasper.JasperException:
javax.servlet.ServletException: File "/theme/shared/shared-styles.jsp" not found
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:527)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
web.servlet.MainEntryServlet.processRequest(MainEntryServlet.java:39)
web.servlet.MainEntryServlet.doGet(MainEntryServlet.java:75)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)
servlet 本身并不是很复杂:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
request.getRequestDispatcher("/theme/mytheme/index.jsp").forward(request, response);
} catch (Exception exc) {
System.out.print(exc);
}
}
在“/theme/mytheme/index.jsp”中,所有 JSP 都以这种方式包含:
<jsp:include flush="true" page="../shared/shared-styles.jsp"/>
我找不到为什么它在 99% 的情况下都有效并且时不时地随机失败的原因。
更新: 我更正了 index.jsp 的路径。刚刚把代码复制到textarea的时候出错了。
index.jsp 的完整路径: /theme/mytheme/index.jsp
shared-styles.jsp 的完整路径 /theme/shared/shared-styles.jsp
【问题讨论】:
-
能否显示 shared-styles.jsp 的完整路径??
-
@stebeg 这还在发生吗?如果没有,你找到它失败的原因了吗?