简体   繁体   English

java.lang.IllegalStateException:在404上提交响应后无法转发

[英]java.lang.IllegalStateException: Cannot forward after response has been committed on 404

I have a Spring 4.0.1 Java Web Application deployed on Glassfish 4.0. 我在Glassfish 4.0上部署了Spring 4.0.1 Java Web应用程序。 Whenever a 404 error occurs, there's an exception thrown in the logs. 每当发生404错误时,日志中都会引发异常。 The error page is shown correctly (it's plain, simple html). 错误页面正确显示(它是简单的html)。 Even though the application works fine, I'd like to get rid of this exception. 即使该应用程序运行正常,我也希望摆脱此异常。 This exception IS NOT thrown when running localy on tomcat. 在tomcat上运行localy时不会抛出此异常。

Error page config in web.xml: web.xml中的错误页面配置:

<error-page>
    <error-code>404</error-code>
    <location>/pages/404.html</location>
</error-page>

<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/pages/500.html</location>
</error-page>

Location points to html files in resources. 位置指向资源中的html文件。

Full stack: 全栈:

[2015-09-28T12:11:39.092+0200] [glassfish 4.0] [WARNING] [] [javax.enterprise.web] [tid: _ThreadID=1126 _ThreadName=http-listener-3(28)] [timeMillis: 1443435099092] [levelValue: 900] [[



org.apache.catalina.core.StandardHostValve@bd9e709: Exception Processing ErrorPage[errorCode=404, location=/pages/404.html]

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: Cannot forward after response has been committed

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)

at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)

at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:875)

at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:739)

at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:695)

at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:626)

at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:492)

at org.apache.catalina.core.StandardHostValve.dispatchToErrorPage(StandardHostValve.java:691)

at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:376)

at org.apache.catalina.core.StandardHostValve.postInvoke(StandardHostValve.java:234)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:359)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)

at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)

at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)

at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)

at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)

at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)

at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)

at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.IllegalStateException: Cannot forward after response has been committed

at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:448)

at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:428)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:378)

at org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler.handleRequest(DefaultServletHttpRequestHandler.java:122)

at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)

... 33 more

----- Root Cause -----

java.lang.IllegalStateException: Cannot forward after response has been committed

at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:448)

at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:428)

at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:378)

at org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler.handleRequest(DefaultServletHttpRequestHandler.java:122)

at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)

at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)

at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:687)

at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)

at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)

at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:875)

at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:739)

at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:695)

at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:626)

at org.apache.catalina.core.StandardHostValve.custom(StandardHostValve.java:492)

at org.apache.catalina.core.StandardHostValve.dispatchToErrorPage(StandardHostValve.java:691)

at org.apache.catalina.core.StandardHostValve.status(StandardHostValve.java:376)

at org.apache.catalina.core.StandardHostValve.postInvoke(StandardHostValve.java:234)

at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:359)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:260)

at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:188)

at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)

at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)

at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)

at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:288)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:206)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:136)

at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:114)

at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)

at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:838)

at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:113)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)

at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:564)

at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:544)

at java.lang.Thread.run(Thread.java:745)

]]

This exception often occurs whenever you try to do a forward or a redirect after you already did once. 一旦您已经做过一次尝试进行转发或重定向,就会经常发生此异常。 Based on my experience, you probably have somewhere in your code an if instruction with a redirect and afterwards another forward/redirect. 根据我的经验,您可能在代码中的某处有一条带重定向的if指令,之后又有一条转发/重定向。 If that's the case, just add an else clause before the second redirect. 如果是这种情况,只需在第二个重定向之前添加else子句。 If this is not the problem, please can you post some more code? 如果这不是问题,请您再发布一些代码?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 java.lang.IllegalStateException:添加`return`后提交响应后无法转发 - java.lang.IllegalStateException: Cannot forward after response has been committed after add `return` java.lang.IllegalStateException:在servletfilter中提交响应后无法转发 - java.lang.IllegalStateException: Cannot forward after response has been committed in servletfilter java.lang.IllegalStateException:在提交响应后无法转发 - java.lang.IllegalStateException: Cannot forward after response has been committed java.lang.IllegalStateException:PWC1227:提交响应后无法转发……为什么要发送? - java.lang.IllegalStateException: PWC1227: Cannot forward after response has been committed…why it was comming? 随机java.lang.IllegalStateException:提交响应后无法转发 - Random java.lang.IllegalStateException: Cannot forward after response has been committed java.lang.IllegalStateException:提交响应后无法转发,位于com.java.QTD.QuestionOfTheDay.doGet() - java.lang.IllegalStateException: Cannot forward after response has been committed, at at com.java.QTD.QuestionOfTheDay.doGet() Spring boot:java.lang.IllegalStateException:响应提交后无法调用sendError() - Spring boot : java.lang.IllegalStateException: Cannot call sendError() after the response has been committed JSF 2.2 java.lang.IllegalStateException:提交响应后无法创建会话 - JSF 2.2 java.lang.IllegalStateException: Cannot create a session after the response has been committed Spring java.lang.IllegalStateException:在提交响应后无法创建会话 - Spring java.lang.IllegalStateException: Cannot create a session after the response has been committed java.lang.IllegalStateException - 在提交响应后无法创建会话 - java.lang.IllegalStateException - Cannot create a session after the response has been committed
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM