JasperException(文件未找到)随机发生

时间:2015-01-28 07:20:34

标签: java jsp servlets

我的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

2 个答案:

答案 0 :(得分:0)

您的绝对路径可能会导致问题,为什么不用${request.contextPath}

替换它

它始终指向应用程序的根目录

答案 1 :(得分:0)

这与您的servlet无关。
错误是找不到你的包含jsp页面 以下变化将是我认为的优势。

<jsp:include flush="true" page="../theme/shared/shared-styles.jsp"/>