正在处理的页面仅在错误/异常中间留下空白,而不是转发到web.xml中指定的错误页面 [英] Pages being processed are merely left blank half way through on errors/exceptions instead of forwarding to the error page specified in web.xml

查看:102
本文介绍了正在处理的页面仅在错误/异常中间留下空白,而不是转发到web.xml中指定的错误页面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在web.xml中,我为全局错误页面提供了以下配置。


$ b

  <错误页> 
<错误代码> 401< /错误代码>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
< error-code> 403< / error-code>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
< error-code> 404< / error-code>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
<错误代码> 500< /错误代码>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
< error-code> 503< / error-code>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

当发生任何异常(导致500内部服务器错误)时,该请求将被调度到指定的错误页面,但是当发生异常时,正在处理的页面只剩下一半空白。
$ b

配置 java.lang.Throwable 它不会转发到错误页面。 < error-页面>
< exception-type> java.lang.Throwable< / exception-type>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

也没有帮助。






web.xml的完整内容:

  <?xml version =1.0encoding =UTF-8?> 
< web-app version =3.1xmlns =http://xmlns.jcp.org/xml/ns/javaeexmlns:xsi =http://www.w3.org/2001/ XMLSchema-instancexsi:schemaLocation =http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd\">
< context-param>
< param-name> javax.faces.FACELETS_LIBRARIES< / param-name>
< param-value> /WEB-INF/my.taglib.xml< / param-value>
< / context-param>

< context-param>
< / param-name> javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE< / param-name>
< param-value> true< /参数值>
< / context-param>
< context-param>
< param-name> javax.faces.PROJECT_STAGE< / param-name>
<参数值>生产< /参数值>
< / context-param>

< context-param>
< param-name> com.sun.faces.enableViewStateIdRendering< / param-name>
< param-value> true< /参数值>
< / context-param>
< context-param>
< param-name> com.sun.faces.enableRestoreView11Compatibility< / param-name>
< param-value> true< /参数值>
< / context-param>

< context-param>
< param-name> javax.faces.STATE_SAVING_METHOD< / param-name>
< param-value>服务器< /参数值>
< / context-param>

< context-param>
< param-name> log4jConfigLocation< / param-name>
< param-value> /WEB-INF/log4j.properties< / param-value>
< / context-param>

< context-param>
< param-name> log4jExposeWebAppRoot< / param-name>
< param-value> false< /参数值>
< / context-param>

< filter>
< filter-name> PrimeFaces FileUpload过滤器< /过滤器名称>
< filter-class> org.primefaces.webapp.filter.FileUploadFilter< / filter-class>
< / filter>

< filter-mapping>
< filter-name> PrimeFaces FileUpload过滤器< /过滤器名称>
< servlet-name> Faces Servlet< / servlet-name>
< / filter-mapping>

< servlet>
< servlet-name> Faces Servlet< / servlet-name>
< servlet-class> javax.faces.webapp.FacesServlet< / servlet-class>
<加载启动> 1< /加载启动>
< / servlet>

< servlet-mapping>
< servlet-name> Faces Servlet< / servlet-name>
< url-pattern> *。xhtml< / url-pattern>
< / servlet-mapping>


<错误页面>
<错误代码> 401< /错误代码>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
< error-code> 403< / error-code>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
< error-code> 404< / error-code>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
<错误代码> 500< /错误代码>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
< error-code> 503< / error-code>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

<错误页面>
< exception-type> java.lang.Throwable< / exception-type>
< location> /WEB-INF/error_pages/GeneralError.xhtml< / location>
< / error-page>

< security-constraint>
< display-name> AdminConstraint< / display-name>
< web-resource-collection>
< web-resource-name> ROLE_ADMIN< / web-resource-name>
< description />
< url-pattern> / admin_side / *< / url-pattern>
< / web-resource-collection>
< auth-constraint>
< description />
< role-name> ROLE_ADMIN< / role-name>
< / auth-constraint>
< user-data-constraint>
< description />
< transport-guarantee> CONFIDENTIAL< / transport-guarantee>
< / user-data-constraint>
< / security-constraint>

< security-constraint>
< display-name> UserConstraint< / display-name>
< web-resource-collection>
< web-resource-name> ROLE_USER< / web-resource-name>
< description />
< url-pattern> / user_side / *< / url-pattern>
< / web-resource-collection>
< auth-constraint>
< description />
< role-name> ROLE_USER< / role-name>
< / auth-constraint>
< user-data-constraint>
< description />
< transport-guarantee> CONFIDENTIAL< / transport-guarantee>
< / user-data-constraint>
< / security-constraint>


< login-config>
< auth-method> FORM< / auth-method>
< realm-name> projectRealm< / realm-name>
< form-login-config>
< form-login-page> /utility/Login.xhtml< / form-login-page>
< form-error-page> /utility/ErrorPage.xhtml< / form-error-page>
< / form-login-config>
< / login-config>
< security-role>
< description />
< role-name> ROLE_ADMIN< / role-name>
< / security-role>
< security-role>
< description />
< role-name> ROLE_USER< / role-name>
< / security-role>
<! - 错误页面>
< / exception-type> javax.faces.application.ViewExpiredException< / exception-type>
< location> /utility/Login.xhtml< / location>
< / error-page - >

< session-config>
< session-timeout>
120
< / session-timeout>
< tracking-mode> COOKIE< / tracking-mode>
< / session-config>
< welcome-file-list>
< welcome-file> utility / Login.xhtml< / welcome-file>
< / welcome-file-list>
< / web-app>

还尝试了一个空白项目,只有一个单独的XHTML页面,没有任何错误页面配置.XML。如果发生异常(在其他HTTP状态中,只有404个作品),页面仅保留为空白而不是转发到错误页面。



如何分派到指定的错误页面,当发生任何异常/错误时?




更新1: p>

根据这个问题/答案,我添加了上下文参数 javax.faces.FACELETS_BUFFER_SIZE 复制到web.xml以获得64KB的缓冲区大小,但没有发生新的事情。如果发生异常,它仍然不会转发到错误页面。如果发生异常/错误,页面只会被部分处理并在中途留空。异常堆栈跟踪只能在服务器终端上找到,而不能在网页上找到(如果500内部服务器错误)。我故意让应用程序抛出异常,看是否转发到错误页面。






更新2 :在设置了编辑1中提到的缓冲区大小之后,我在某个时间(当请求被重定向到安全区域时得到以下例外): 成功登录后)。

 严重:错误渲染视图[/utility/Login.xhtml] 
java.lang.IllegalStateException $在org.apache.catalina.connector.ResponseFacade.setBufferSize(ResponseFacade.java:285)b
$ b。在com.sun.faces.context.ExternalContextImpl.setResponseBufferSize(ExternalContextImpl.java:923 )
处com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView com.sun.faces.application.view.FaceletViewHandlingStrategy.createResponseWriter(FaceletViewHandlingStrategy.java:1162)
(FaceletViewHandlingStrategy.java:403 )美元,com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133 b $ b)
在javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
。在javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
在com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
A t com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
at javax.faces .webapp.FacesServlet.service(FacesServlet.java:647)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:344)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
在org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter的.java:72)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java:256)
。在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214 )
处org.apache.catalina.core.ApplicationFilterChain.internalDoFilter filter.LoginNocacheFilter.doFilter(LoginNocacheFilter.java:39)
(ApplicationFilterChain.java:256 )在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214

在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
。在在org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
。在组织。 apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina。 core.StandardHostValve.invoke(StandardHostValve.java:174)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
at org.apache.catalina.connector.CoyoteAdapter。服务(CoyoteAdapter.java:282)
在com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable.call(ContainerMapper.java:459)
在com.sun.enterprise.v3。 services.impl.ContainerMapper.serv在org.glassfish.grizzly.http.server.HttpHandler.runService冰(ContainerMapper.java:167)
(HttpHandler.java:201)
。在org.glassfish.grizzly.http.server.HttpHandler。 doHandle(HttpHandler.java:175)
在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute (ExecutorResolver.java:119)在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)

在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java :201)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCP NIOTransport.java:561)美元,org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112 B $ B)
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java: 117)
。在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56)$ b $在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run b(WorkerThreadIOStrategy.java:137 )
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:565)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:545 )
java.lang.Thread.run(Thread.java:745)

Info:处理尝试重置响应的错误时发生异常。
$ java.lang.IllegalStateException在org.apache.catalina.connector.ResponseFacade.setBufferSize(ResponseFacade.java:285)B
$ b。在com.sun.faces.context.ExternalContextImpl.setResponseBufferSize(ExternalContextImpl的.java:923)
处com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView com.sun.faces.application.view.FaceletViewHandlingStrategy.createResponseWriter(FaceletViewHandlingStrategy.java:1162)
(FaceletViewHandlingStrategy的.java:403)
处javax.faces.application.ViewHandlerWrapper.renderView com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
(ViewHandlerWrapper.java:337 )
at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.render(Lifec ycleImpl.java:219)
在javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
在org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)

在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
在org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
在org.apache .catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
在filter.LoginNocacheFilter.doFilter(LoginNocacheFilter.java:39)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain .java:256)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
at or g.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
在org.apache。 catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
处com.sun.enterprise.web org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
。 WebPipeline.invoke(WebPipeline.java:99)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
在org.apache.catalina.connector.CoyoteAdapter.doService( CoyoteAdapter.java:415)
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
在com.sun.enterprise.v3.services.impl.ContainerMapper $ HttpHandlerCallable。在org.glassfish.grizzly.http.server上调用(ContainerMapper.java:459)
在com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
。 HttpHandler.runService(HttpHandler.java:20 1)
在org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
在org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java: 235)
在org.glassfish.grizzly.filterchain.ExecutorResolver $ 9.execute(ExecutorResolver.java:119)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
。在org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
在org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
。在org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
在org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
。在org.glassfish.grizzly。 nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy。的java:在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117 112)

。在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access $ 100(WorkerThreadIOStrategy.java:56 )
在org.glassfish.grizzly.strategies.WorkerThreadIOStrategy $ WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.doWork(AbstractThreadPool.java:565 )
在org.glassfish.grizzly.threadpool.AbstractThreadPool $ Worker.run(AbstractThreadPool.java:545)$ b $在java.lang.Thread.run(Thread.java:745)






更新3:



我试图增加缓冲区大小( 100002400 太多了),直到错误 java.lang.OutOfMemoryError :发布Java堆空间。因此,输出缓冲区大小不应该成为问题。

在Ajaxical的情况下,通过OmniFaces的异步请求, org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory 配置在 faces-config.xml中



也许,如果我在开始时配置了错误页面,那么可能会发现问题的原因 - 当我启动应用程序时,应用程序因此没有多少额外的开销许多XHTML页面,CDI管理的bean,EJB会话bean等,但无论如何,我不知所措。




Update 4:



我现在在WildFly 9.0.2 final上运行相同的应用程序。问题保持不变。

解决方案

通过增加错误页面大小来检查GeneralError.xhtml。
有时,如果服务器的大小较小,则不显示错误页面。
即尝试向GeneralError.xhtml添加更多50-100行文本并检查)


In web.xml, I have the following configurations for a global error page.

<error-page>
    <error-code>401</error-code>
    <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
</error-page>

<error-page>
    <error-code>403</error-code>
    <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
</error-page>

<error-page>
    <error-code>404</error-code>
    <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
</error-page>

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
</error-page>

<error-page>
    <error-code>503</error-code>
    <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
</error-page>

When any exception occurs (that result in 500 internal server error), the request is expected to be dispatched to the error page specified but when an exception occurs, the page which is being processed is just left blank in half way through. It does not forward to the error page.

Configuring java.lang.Throwable or java.lang.Exception as follows,

<error-page>
    <exception-type>java.lang.Throwable</exception-type>
    <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
</error-page>

also did not help anymore.


The full contents of web.xml :

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <context-param>
        <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
        <param-value>/WEB-INF/my.taglib.xml</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>javax.faces.PROJECT_STAGE</param-name>
        <param-value>Production</param-value>
    </context-param>

    <context-param>
        <param-name>com.sun.faces.enableViewStateIdRendering</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>com.sun.faces.enableRestoreView11Compatibility</param-name>
        <param-value>true</param-value>
    </context-param>

    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>server</param-value>
    </context-param>

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>

    <context-param>
        <param-name>log4jExposeWebAppRoot</param-name>
        <param-value>false</param-value>
    </context-param>

    <filter>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>PrimeFaces FileUpload Filter</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
    </filter-mapping>

    <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>


    <error-page>
        <error-code>401</error-code>
        <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
    </error-page>

    <error-page>
        <error-code>403</error-code>
        <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
    </error-page>

    <error-page>
        <error-code>404</error-code>
        <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
    </error-page>

    <error-page>
        <error-code>500</error-code>
        <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
    </error-page>

    <error-page>
        <error-code>503</error-code>
        <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
    </error-page>

    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/WEB-INF/error_pages/GeneralError.xhtml</location>
    </error-page>

    <security-constraint>
        <display-name>AdminConstraint</display-name>
        <web-resource-collection>
            <web-resource-name>ROLE_ADMIN</web-resource-name>
            <description/>
            <url-pattern>/admin_side/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>ROLE_ADMIN</role-name>
        </auth-constraint>
        <user-data-constraint>
            <description/>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>

    <security-constraint>
        <display-name>UserConstraint</display-name>
        <web-resource-collection>
            <web-resource-name>ROLE_USER</web-resource-name>
            <description/>
            <url-pattern>/user_side/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>ROLE_USER</role-name>
        </auth-constraint>
        <user-data-constraint>
            <description/>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>


    <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>projectRealm</realm-name>
        <form-login-config>
            <form-login-page>/utility/Login.xhtml</form-login-page>
            <form-error-page>/utility/ErrorPage.xhtml</form-error-page>
        </form-login-config>
    </login-config>
    <security-role>
        <description/>
        <role-name>ROLE_ADMIN</role-name>
    </security-role>
    <security-role>
        <description/>
        <role-name>ROLE_USER</role-name>
    </security-role>
    <!--error-page>
        <exception-type>javax.faces.application.ViewExpiredException</exception-type>
        <location>/utility/Login.xhtml</location>
    </error-page-->

    <session-config>
        <session-timeout>
            120
        </session-timeout>
        <tracking-mode>COOKIE</tracking-mode>
    </session-config>
    <welcome-file-list>
        <welcome-file>utility/Login.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

Also tried on a blank project with only a single XHTML page and nothing other than error page configurations in web.xml. Pages are merely left blank half way through instead of forwarding to the error page, when an exception occurs (among other HTTP status, only 404 works).

How to dispatch to a specified error page, when any exception/error occurs?


Update 1 :

According to this question/answer, I added the context parameter javax.faces.FACELETS_BUFFER_SIZE to web.xml to have 64KB buffer size but nothing new happened. It still does not forward to the error page, if an exception occurs. Pages are just partially processed and left blank in half way through, if an exception/error occurs. The exception stacktrace is only found on the server terminal and not on the web page (in case 500 internal server error). I deliberately make the application throw an exception to see, if it forwards to the error page.


Update 2 :

After setting the buffer size as mentioned in edit 1, I got the following exception at a certain time (when a request is redirected to a secured area after a successful login). So, I removed that parameter for now.

Severe:   Error Rendering View[/utility/Login.xhtml]
java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.setBufferSize(ResponseFacade.java:285)
    at com.sun.faces.context.ExternalContextImpl.setResponseBufferSize(ExternalContextImpl.java:923)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.createResponseWriter(FaceletViewHandlingStrategy.java:1162)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:403)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at filter.LoginNocacheFilter.doFilter(LoginNocacheFilter.java:39)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)

Info:   Exception when handling error trying to reset the response.
java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.setBufferSize(ResponseFacade.java:285)
    at com.sun.faces.context.ExternalContextImpl.setResponseBufferSize(ExternalContextImpl.java:923)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.createResponseWriter(FaceletViewHandlingStrategy.java:1162)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:403)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:133)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:337)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:120)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:219)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:647)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:344)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:72)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at filter.LoginNocacheFilter.doFilter(LoginNocacheFilter.java:39)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:316)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:734)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:673)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:174)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:415)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:282)
    at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:459)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:167)
    at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:201)
    at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:175)
    at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:235)
    at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:284)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:201)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:133)
    at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
    at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:77)
    at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:561)
    at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:117)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:56)
    at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:137)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:565)
    at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:545)
    at java.lang.Thread.run(Thread.java:745)


Update 3 :

I tried to increase the buffer size (100002400 that's too much) until the error java.lang.OutOfMemoryError: Java heap space is issued. Therefore, the output buffer size should not be the problem.

In Ajaxical things, error pages by the way, are correctly rendered on errors during asynchronous requests by means of OmniFaces - org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory configured in faces-config.xml.

Perhaps, it could have been possible to see the cause of the problem, if I had configured error pages in the beginning - when I started the application and the application consequently had no much extra overhead that it currently has with many XHTML pages, CDI managed beans, EJB session beans etc but anyway I overwhelmed it.


Update 4:

I am now running the same application on WildFly 9.0.2 final. The problem remains unchanged.

解决方案

Check by increasing the size of your error page GeneralError.xhtml. Sometimes the server doesn't display the error page if it is smaller in size. i.e. try adding some more 50-100 lines of text to GeneralError.xhtml and check)

这篇关于正在处理的页面仅在错误/异常中间留下空白,而不是转发到web.xml中指定的错误页面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆