将请求转发到Java Web应用程序中的servlet时出现异常

时间:2016-11-11 09:38:59

标签: java maven netbeans guice tomcat8

我遇到了问题而且我不知道如何解决它。

我的Web应用程序MyApp是一个Maven Web应用程序项目(Java 8和Java EE 5)。要在同一服务器上将更新版本作为测试实例运行,我将应用程序的上下文路径从MyApp更改为MyAppTest。作为servlet容器,我使用的是Tomcat 8。

MyApp实例按预期工作。但是,MyAppTest实例在将请求转发给我的一个servlet时抛出异常。即使MyAppMyAppTest除上下文路径外相同,也会发生此异常。 Servlet通过Guice的ServletModule进行映射。

消息:

  

java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-4

堆栈跟踪:

  

java.lang.String.substring(未知来源)   com.google.inject.servlet.ServletDefinition $ 2.getPathInfo(ServletDefinition.java:212)   org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:376)   org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)   myapp.base.MainEntryServlet.service(MainEntryServlet.java:49)   javax.servlet.http.HttpServlet.service(HttpServlet.java:729)   com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286)   com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:276)   com.google.inject.servlet.ManagedServletPipeline $ 1.doServiceImpl(ManagedServletPipeline.java:154)   com.google.inject.servlet.ManagedServletPipeline $ 1.forward(ManagedServletPipeline.java:140)   myapp.auth.LogoutServlet.service(LogoutServlet.java:57)   javax.servlet.http.HttpServlet.service(HttpServlet.java:729)   com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:286)   com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:276)   com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:181)   com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)   com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)   com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:120)   com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:135)   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)   org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)   org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)   org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)   org.apache.coyote.ajp.AbstractAjpProcessor.process(AbstractAjpProcessor.java:873)   org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:670)   org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1520)   org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1476)   java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)   org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)   java.lang.Thread.run(未知来源)

转发请求的Servlet执行此操作:

RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp");
if (!response.isCommitted()) {
  dispatcher.forward(request, response);
}

URL index.jsp映射到另一个Servlet。它将请求转发给JSP:

request.getRequestDispatcher("/theme/index.jsp").forward(request, response);

发生异常。其他一些JSP包含在index.jsp中,如下所示:

<jsp:include flush="true" page="menu.jsp"/>

menu.jspindex.jsp位于同一文件夹中。

如前所述,只要上下文路径为MyApp,一切正常。当更改为MyAppTest时,会发生异常。它必须与Context路径本身有关。将路径更改为MyAppTest时,异常消息为&#34;字符串索引超出范围:-4&#34;。当我将路径更改为MyAppTesting时,异常消息将更改为&#34;字符串索引超出范围:-7&#34;。

为了解决这个问题,我尝试了以下方法:

  • 将上下文路径和docBase更改为项目MyAppTest中的context.xml
  • 将项目的工件ID更改为MyAppTest
  • 将项目名称更改为MyAppTest

没有任何效果。而且我不知道是什么导致了这个例子:Maven,Tomcat或Guice。

0 个答案:

没有答案
相关问题