当我尝试运行一个简单的测试 war 文件作为 WSO2 Application Server 版本 5.3.0 的 ROOT 上下文时,我收到以下错误:
[2016-03-19 17:24:00,177] 错误 {org.apache.catalina.core.StandardWrapperValve} - servlet [jsp] 的 Servlet.service() 在路径 [/] 的上下文中抛出异常 [无法为JSP] 的根本原因是 java.lang.IllegalArgumentException:org.apache.jasper.compiler.Compiler.compile(Compiler.java:377) 的 java.io.File.setLastModified(File.java:1421) 的负时间。 apache.jasper.compiler.Compiler.compile(Compiler.java:354) 在 org.apache.jasper.compiler.Compiler.compile(Compiler.java:341) 在 org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java: 657) 在 org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395) 在 org.apache.jasper.servlet.JspServlet .service(JspServlet.java:339) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org. apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve. java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.wso2.carbon.statistics.webapp.RequestIntercepterValve.invoke( RequestIntercepterValve.java:47) 在 org.wso2.carbon.bam.webapp.stat.publisher.WebAppStatisticPublisherValve.invoke(WebAppStatisticPublisherValve.java:104) 在 org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve. java:99) 在 org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47) 在 org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57) 在org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) 在 org.wso2.carbon.tomcat.ext.valves.CompositeValve。在 org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 调用(CompositeValve.java:62)在 org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector .CoyoteAdapter.service(CoyoteAdapter.java:421) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 在org.apache.tomcat.util.net 上的 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1739)。NioEndpoint$SocketProcessor.run(NioEndpoint.java:1698) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org .apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)
如果我运行与任何其他上下文路径(例如 /testurl)相同的应用程序,它会完美运行。那么,只有在尝试以 ROOT 运行时,才可能导致上述负时间错误?
PS:要以 root 身份运行我的应用程序,我做了两件事:
- 将所有其他应用程序移出 webapps 目录并将我的战争重命名为 ROOT.war
- 在 ./repository/conf/carbon.xml 中,我将 WebContextRoot 设置为,
<WebContextRoot>/carbon</WebContextRoot>
所以现在默认碳管理应用程序在 /carbon 路径上可用。(顺便说一句,效果很好。)
此测试应用程序只有一个 index.jsp 文件,其内容如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="java.util.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test headers</title>
</head>
<body>
<%
out.println("request.getServerName()="+request.getServerName()+"</br>");
String[] serverurl= request.getServerName().split("\\.");
String clientcode=serverurl[0];
out.println("clientcode="+clientcode+"</br>");
Enumeration headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
out.println(key+"="+value+"</br>");
}
%>
</body>
</html>
我从 JSP 编译器中看到了这个负时间,它不适用于我的情况。我的测试战路径中的任何地方都没有空格、句点或连字符。它可能是由trailing slash in application context
但如果是的话,我无法弄清楚可能是什么原因造成的。
如何解决这个负时间问题?