2014-11-04 30 views
7

In web.xml, ho le seguenti configurazioni per una pagina di errore globale.Le pagine in elaborazione vengono semplicemente lasciate vuote a metà strada su errori/eccezioni invece di inoltrare alla pagina di errore specificata in web.xml

<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> 

Quando qualsiasi eccezione si verifica (che risultano in 500 errore interno del server), la richiesta dovrebbe essere inviato alla pagina di errore specificato ma quando si verifica un'eccezione, la pagina che si elabora è solo lasciato vuoto in a meta 'strada. Non inoltra alla pagina di errore.

Configurazione java.lang.Throwable o java.lang.Exception come segue,

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

inoltre non ha aiutato più.


L'intero contenuto di 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> 

provato anche su un progetto vuoto con una sola pagina XHTML e altro che configurazioni pagina di errori in web.xml. Le pagine vengono semplicemente lasciate vuote a metà strada anziché inoltrare alla pagina di errore, quando si verifica un'eccezione (tra gli altri stati HTTP, solo 404 funziona).

Come inviare a una pagina di errore specificata, quando si verifica un'eccezione/errore?


Update 1:

Secondo this domanda/risposta, ho aggiunto il parametro di contesto javax.faces.FACELETS_BUFFER_SIZE a web.xml di avere 64 KB dimensione del buffer, ma nulla di nuovo è accaduto. Non inoltra ancora la pagina di errore, se si verifica un'eccezione. Le pagine sono solo parzialmente elaborate e lasciate vuote a metà, se si verifica un'eccezione/errore. L'eccezione stacktrace si trova solo sul terminale del server e non sulla pagina Web (nel caso di errore interno del server 500). Faccio volutamente fare all'applicazione un'eccezione per vedere se inoltra alla pagina di errore.


Aggiornamento 2:

Dopo aver impostato la dimensione del buffer come menzionato nella modifica 1, ho ottenuto la seguente eccezione ad una certa ora (quando una richiesta viene reindirizzata a una zona protetta, dopo un login riuscito). Quindi, ho rimosso quel parametro per ora.

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:

ho cercato di aumentare la dimensione del buffer (100002400 che è troppo) fino a quando viene emesso l'errore java.lang.OutOfMemoryError: Java heap space. Pertanto, la dimensione del buffer di output non dovrebbe essere il problema.

In Ajaxical, le pagine di errore, a proposito, vengono correttamente visualizzate sugli errori durante le richieste asincrone tramite OmniFaces - org.omnifaces.exceptionhandler.FullAjaxExceptionHandlerFactory configurato in faces-config.xml.

Forse, sarebbe stato possibile vedere la causa del problema, se avessi configurato le pagine di errore all'inizio - quando ho avviato l'applicazione e l'applicazione di conseguenza non aveva un sovraccarico extra che attualmente ha con molti XHTML pagine, fagioli gestiti da CDI, bean di sessione EJB ecc. ma comunque l'ho sopraffatto.


Update 4:

Ora sto facendo funzionare la stessa applicazione su wildfly 9.0.2 finale. Il problema rimane invariato.

+0

Avete provato questo in un contenitore completamente diverso? Forse JBoss? – kolossus

+0

È solo GlassFish Server 4.1 ed è l'unica applicazione distribuita sul server. Altri server sono stati chiusi mentre GlassFish era in esecuzione. @kolossus – Tiny

+0

Il mio punto qui è che dovresti cercare di eliminare la possibilità di un bug nel tuo contenitore; Prova a distribuire la stessa app in un contenitore diverso – kolossus

risposta

-1

Controllare aumentando la dimensione della pagina di errore GeneralError.xhtml. A volte il server non visualizza la pagina di errore se è di dimensioni più ridotte. Provate ad aggiungere altre 50-100 righe di testo a GeneralError.xhtml e controllate)

+0

Questo non è specifico per il server. Questo è specifico per il browser. In particolare quello sviluppato da una squadra da qualche parte a Redmond. Ci sono modi migliori per visualizzare comunque la pagina di errore. Inoltre, questa non è la causa del problema concreto dell'OP in quanto il browser in questione non visualizza invece una pagina completamente vuota. – BalusC

+0

Quando sever non visualizza la pagina corretta, il browser sceglierà di visualizzare la pagina di errore predefinita che ha. – Nitin

+0

Come detto, questo non è il problema qui. Leggi la domanda ancora una volta.Se in realtà non ne capisci nulla, perché stai rispondendo? – BalusC