Home > Foro de Struts >

Debates de Struts > Página de error con Struts tras \"ServletException\"

Página de error con Struts tras \"ServletException\"

Escrito por Juan Pablo el 30/11/2007

Hola de nuevo!

Estoy trabajando con Struts, y para el manejo de excepciones uso "handlers" que defino en el fichero "struts-config. Xml", dentro de cada etiqueta "action" según corresponda. Además tengo definido otro "handler" en "global-exceptions" para las "ServletException", y con esto tengo un problema.
Cuando se produce una "ServletException" en el código de una "action", los resultados son los esperados, es decir, se ejecuta el "handler" de "global-exceptions" y retorno a la página que figura en el atributo "path" de la etiqueta "exception". El caso es que también deseo que cuando se produzca una "ServletException" en el código de un "handler" asociado a cualquier "action" (primero ocurre una excepción en una "action", y al manejarla en su handler ocurre una "ServletException) suceda lo mismo, pero sin embargo no lo consigo.
Tomcat me muestra una página donde informa de "Estado HTTP 500", "type", "mensaje", "descripción", "excepción", "causa raiz" y "nota", que no es la página que quiero retornar yo.
No sé si es posible solucionarlo así o hay otro modo de retornar, en las condiciones descritas, a una página que yo designe. Podríais darme una solución? Gracias y un saludo


Citar  |  
Ver mensaje      

Hugo Hidalgo
Estado de México, Mé...
Escrito por Hugo Hidalgo el 04/12/2007

No se porque te este dando este problema seria mejor ver tu configuracion xml y tu action

Salu2


Citar  |  
Ver mensaje     

Escrito por Juan Pablo el 05/12/2007

Buenas!

Este es el código del handler para las ServletException:


public class ServletExceptionHandler extends ExceptionHandler {
   
    private static Logger logger = Logger. GetLogger(ServletExceptionHandler. Class);

   
    public ActionForward execute(Exception e, ExceptionConfig eConf, ActionMapping mapping,
            ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws ServletException {
       
        // Informamos mediante logging acerca de la excepción ocurrida
        logger. Error(e. GetMessage(), e);
       
        request. SetAttribute("ServletException", e);
        return new ActionForward(eConf. GetPath());
}


y este es el código del handler para las RuntimeException:


public class RuntimeExceptionHandler extends ExceptionHandler {
   
    private static Logger logger = Logger. GetLogger(RuntimeExceptionHandler. Class);

   
    public ActionForward execute(Exception e, ExceptionConfig eConf, ActionMapping mapping,
            ActionForm form, HttpServletRequest request, HttpServletResponse response)
            throws ServletException {
       
        // Informamos mediante logging acerca de la excepción ocurrida
        logger. Error(e. GetMessage(), e);
       
        request. SetAttribute("RuntimeException", e);
        return new ActionForward(eConf. GetPath());
  }


En lo que se refiere a struts-config. Xml, estas son las líneas que implican a los handlers:


<global-exceptions>
 <exception type="javax.servlet.ServletException" path="/jsp/fallo. Jsp" handler="proyecto.exception.ServletExceptionHandler"/>
</global-exceptions>


<action path="/identificacionUsuario" type="proyecto.action.IdentificacionUsuarioAction" name="identificacionUsuarioForm" scope="request" input="/index. Jsp" validate="true" cancellable="true">
 <exception type="java.lang.RuntimeException" path="/jsp/identificacion/fallo. Jsp" handler="proyecto.exception.RuntimeExceptionHandler"/>
        <forward name="success" path="/jsp/identificacion/exito. Jsp"/>           
</action>

Como expliqué, si se lanza una ServletException en IdentificacionUsuarioAction, las cosas funcionan como espero puesto que se pasa el control a ServletExceptionHandler y se muestra la página de error correspondiente. Sin embargo, si se lanza una RuntimeException en IdentificacionUsuarioAction, se pasa el control a RuntimeExceptionHandler, y si dentro de este handler se lanzase una ServletException, el control no va a ServletExceptionHandler, sino que Tomcat muestra su pagina de informe de error "Estado HTTP 500.... "

Te aporto también la salida del logging, donde el fallo del driver es provocado por mí para generar la RuntimeException, y donde la segunda línea de error generada en [proyectoGestionCarteras] (nombre que le he dado en web. Xml a org.apache.struts. Action. ActionServlet) debería tener lugar creo yo en ServletExceptionHandler.


23:03:05,374 ERROR RuntimeExceptionHandler:31 - El driver com.mysql.jdbc. Drive no ha podido cargarse
java.lang.RuntimeException: El driver com.mysql.jdbc. Drive no ha podido cargarse
 at proyecto.service.MySQLDAOFactory. <init>(MySQLDAOFactory. Java:39)
 at proyecto.service.DAOFactory. CreateDAOFactory(DAOFactory. Java:40)
 at proyecto.action.CustomBaseAction. GetDAOFactory(CustomBaseAction. Java:37)
 at proyecto.action.CustomBaseAction. GetService(CustomBaseAction. Java:54)
 at proyecto.action.IdentificacionUsuarioAction. Execute(IdentificacionUsuarioAction. Java:51)
 at org.apache.struts. action.RequestProcessor.processActionPerform(RequestProcessor. Java:431)
 at org.apache.struts. action.RequestProcessor.process(RequestProcessor. Java:236)
 at org.apache.struts. action.ActionServlet.process(ActionServlet. Java:1196)
 at org.apache.struts. action.ActionServlet.doPost(ActionServlet. Java:432)
 at javax.servlet.http. HttpServlet. Service(HttpServlet. Java:709)
 at javax.servlet.http. HttpServlet. Service(HttpServlet. Java:802)
 at org.apache.catalina. core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain. Java:252)
 at org.apache.catalina. core.ApplicationFilterChain.doFilter(ApplicationFilterChain. Java:173)
 at org.netbeans.modules. web.monitor.server. MonitorFilter. DoFilter(MonitorFilter. Java:368)
 at org.apache.catalina. core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain. Java:202)
 at org.apache.catalina. core.ApplicationFilterChain.doFilter(ApplicationFilterChain. Java:173)
 at org.apache.catalina. core.StandardWrapperValve.invoke(StandardWrapperValve. Java:213)
 at org.apache.catalina. core.StandardContextValve.invoke(StandardContextValve. Java:178)
 at org.apache.catalina. core.StandardHostValve.invoke(StandardHostValve. Java:126)
 at org.apache.catalina. valves.ErrorReportValve.invoke(ErrorReportValve. Java:105)
 at org.apache.catalina. core.StandardEngineValve.invoke(StandardEngineValve. Java:107)
 at org.apache.catalina. connector.CoyoteAdapter.service(CoyoteAdapter. Java:148)
 at org.apache.coyote. http11.Http11Processor.process(Http11Processor. Java:869)
 at org.apache.coyote. Http11. Http11BaseProtocol$Http11ConnectionHandler. ProcessConnection(Http11BaseProtocol. Java:664)
 at org.apache.tomcat. util.net.PoolTcpEndpoint. ProcessSocket(PoolTcpEndpoint. Java:527)
 at org.apache.tomcat. util.net.LeaderFollowerWorkerThread. RunIt(LeaderFollowerWorkerThread. Java:80)
 at org.apache.tomcat. util.threads.ThreadPool$ControlRunnable. Run(ThreadPool. Java:684)
 at java.lang.Thread. Run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc. Drive
 at org.apache.catalina. loader.WebappClassLoader.loadClass(WebappClassLoader. Java:1355)
 at org.apache.catalina. loader.WebappClassLoader.loadClass(WebappClassLoader. Java:1201)
 at java.lang.ClassLoader. LoadClassInternal(Unknown Source)
 at java.lang.Class. ForName0(Native Method)
 at java.lang.Class. ForName(Unknown Source)
 at proyecto.service.MySQLDAOFactory. <init>(MySQLDAOFactory. Java:35)
 ... 27 more
23:03:06,311 ERROR [proyectoGestionCarteras]:253 - Servlet. Service() para servlet proyectoGestionCarteras lanzó excepción
javax.servlet.ServletException
 at proyecto.exception.RuntimeExceptionHandler. Execute(RuntimeExceptionHandler. Java:34)
 at org.apache.struts. action.RequestProcessor.processException(RequestProcessor. Java:543)
 at org.apache.struts. action.RequestProcessor.processActionPerform(RequestProcessor. Java:433)
 at org.apache.struts. action.RequestProcessor.process(RequestProcessor. Java:236)
 at org.apache.struts. action.ActionServlet.process(ActionServlet. Java:1196)
 at org.apache.struts. action.ActionServlet.doPost(ActionServlet. Java:432)
 at javax.servlet.http. HttpServlet. Service(HttpServlet. Java:709)
 at javax.servlet.http. HttpServlet. Service(HttpServlet. Java:802)
 at org.apache.catalina. core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain. Java:252)
 at org.apache.catalina. core.ApplicationFilterChain.doFilter(ApplicationFilterChain. Java:173)
 at org.netbeans.modules. web.monitor.server. MonitorFilter. DoFilter(MonitorFilter. Java:368)
 at org.apache.catalina. core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain. Java:202)
 at org.apache.catalina. core.ApplicationFilterChain.doFilter(ApplicationFilterChain. Java:173)
 at org.apache.catalina. core.StandardWrapperValve.invoke(StandardWrapperValve. Java:213)
 at org.apache.catalina. core.StandardContextValve.invoke(StandardContextValve. Java:178)
 at org.apache.catalina. core.StandardHostValve.invoke(StandardHostValve. Java:126)
 at org.apache.catalina. valves.ErrorReportValve.invoke(ErrorReportValve. Java:105)
 at org.apache.catalina. core.StandardEngineValve.invoke(StandardEngineValve. Java:107)
 at org.apache.catalina. connector.CoyoteAdapter.service(CoyoteAdapter. Java:148)
 at org.apache.coyote. http11.Http11Processor.process(Http11Processor. Java:869)
 at org.apache.coyote. Http11. Http11BaseProtocol$Http11ConnectionHandler. ProcessConnection(Http11BaseProtocol. Java:664)
 at org.apache.tomcat. util.net.PoolTcpEndpoint. ProcessSocket(PoolTcpEndpoint. Java:527)
 at org.apache.tomcat. util.net.LeaderFollowerWorkerThread. RunIt(LeaderFollowerWorkerThread. Java:80)
 at org.apache.tomcat. util.threads.ThreadPool$ControlRunnable. Run(ThreadPool. Java:684)
 at java.lang.Thread. Run(Unknown Source)

Si no es suficiente información, dime qué más necesitas

Gracias y un saludo


Citar  |  
Ver mensaje     

Hugo Hidalgo
Estado de México, Mé...
Escrito por Hugo Hidalgo el 06/12/2007

Esta bien que quieras tratar las excepciones como las tienes planteadas, pero deberias tratar de realizar ese tratamiento de manera menos complicada ya que no acabo de entender para que necesitas manejarlas de esa manera. Te comento que llevo tiempo usando struts y nunca he tenido problemas de ese tipo con execptiones.

Salu2


Citar  |  
Ver mensaje     

Escrito por Inexperto el 24 de Septiembre
Estaba a punto de comprar algo en una pagina cuando depronto me dijo que tenia que modificar la privacidad para las coockies cuando lo hice ya las imagenes de los productos no aparecen sin este error, que debo hacer:
500 Servlet Exception

java.lang.IllegalStateException: forward() not allowed after buffer has committed. At com.caucho.server. webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl. Java:139) at com.caucho.server. webapp.RequestDispatcherImpl.error(RequestDispatcherImpl. Java:113) at com.caucho.server. webapp.ErrorPageManager.sendServletError(ErrorPageManager. Java:354) at com.caucho.server. webapp.WebAppFilterChain.doFilter(WebAppFilterChain. Java:165) at com.caucho.server. dispatch.ServletInvocation.service(ServletInvocation. Java:208) at com.caucho.server. hmux.HmuxRequest.handleRequest(HmuxRequest. Java:396) at com.caucho.server. port.TcpConnection.run(TcpConnection. Java:363) at com.caucho.util. ThreadPool. RunTasks(ThreadPool. Java:490) at com.caucho.util. ThreadPool. Run(ThreadPool. Java:423) at java.lang.Thread. Run(Thread. Java:619)

Resin-3.0.14 (built Tue, 05 Jul 2005 11:03:36 PDT


Citar  |  
Ver mensaje     


Responder


Quiero recibir alertas por email cuando haya mensajes nuevos en este debate

Al escribir en el debate:
  1. Repasa la ortografía y no escribas en formato SMS.
  2. Lee el texto dos veces antes de publicar.
  3. No escribas todo en mayúsculas o negritas.
 
Páginas internacionales: España  |  Italia  |  Francia  |  México  |  Alemania  |  Reino Unido  |  Argentina  |  Chile  |  Colombia  |  USA

Búsquedas frecuentes: escuela atomista como instalar un foco hematrocitos musica wav ejemplos de mezclas heterogeneas

Emagister cumple la Ley Orgánica 15/1999 de 13 de diciembre, de Protección de datos de Carácter Personal, y posee el código de inscripción nº 2002010053 del Registro General de la Agencia de Protección de Datos. Copyright © 1999/2000 - Grupo Intercom - Todos los derechos