JSP编译器的负时间

mmo*_*son 8 jsp tomcat tomcat7

可能导致这样的错误的原因是什么?File.java的Javadoc表示,如果以负值传递,它将抛出此异常.所以问题是,为什么碧玉传递负值.我找了jasper的来源,但是我找不到与我正在运行的完全相符的那些,行号不完全匹配.根据javadoc,我已经从File.lastModified设置了最后修改时间,该时间永远不会返回负值.

SEVERE: Servlet.service() for servlet jsp threw exception
java.lang.IllegalArgumentException: Negative time
        at java.io.File.setLastModified(File.java:1258)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:376)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
Run Code Online (Sandbox Code Playgroud)

...

更新:我下载了Tomcat的源代码并阅读了源代码.Compile.java的相关代码是:

375   File javaFile = new File(ctxt.getServletJavaFileName());
376   Long jspLastModified = ctxt.getLastModified(ctxt.getJspFile());
377   javaFile.setLastModified(jspLastModified.longValue());
Run Code Online (Sandbox Code Playgroud)

ctxt是一个JspCompilationContext,如果有任何错误,它会默认返回-1,而File会从负参数中抛出IllegalArgumentException.我仍然不知道为什么我会收到错误,至少我知道IllegalArgumentException的来源.

bed*_*rin 5

当我从IntelliJ Idea部署应用程序并在应用程序上下文中使用尾部斜杠时,我遇到了与7.0.27相同的问题 - 删除它对我有用


Bal*_*usC 0

看起来像是Tomcat 中的一个错误。尝试 Tomcat 7.0.16,其中它没有显式设置生成的 Java 文件的最后修改时间。在该版本之后它发生了变化。如果它适用于 7.0.16,我会向 Tomcat 人员报告错误,并提供有关该平台的尽可能多的详细信息(Redhat 5 信息不足)。