2010-12-08 7 views
6

Tengo una página JSP (en Tomcat) que utiliza etiquetas JSP para recuperar algunos datos. Pero estas etiquetas JSP pueden arrojar excepciones (por ejemplo, cuando los valores de los parámetros no son válidos). Ahora quiero implementar un mejor manejo de errores para estas situaciones. No pude encontrar una forma de especificar GLOBALMENTE un manejador de excepciones (las definiciones de página de error en web.xml no funcionan para las excepciones lanzadas en un JSP). La única forma que encontré hasta ahora es especificar un atributo errorPage en el encabezado de página de TODOS los archivos JSP.Cómo configurar código de estado HTTP en controladores de errores JSP

<% page errorPage="/WEB-INF/jsp/errors/500.jsp" %> 

Bastante molesto para hacer esto para TODAS las JSP, pero es aceptable. Pero no es aceptable el hecho de que la página de error siempre se entregue con un código de estado HTTP de 200. Quiero un 500 en su lugar. Intenté usar un servlet como errorPage en lugar de un JSP e intenté establecer response.setStatus (500) y también response.sendError (500), pero parece que se ignoran ambas llamadas. Por lo que este código imprime "200" dos veces y no tengo ni idea de por qué:

System.out.println(response.getStatus()); 
response.setStatus(500); 
System.out.println(response.getStatus()); 

Así que la pregunta es: ¿Cómo puedo configurar el código de estado HTTP en los controladores de error JSP?

Respuesta

4

Puede configurar sus páginas de error en web.xml.

<error-page> 
     <error-code> 
      500 
     </error-code> 
     <location> 
      /500.jsp 
     </location> 
    </error-page> 

en su 500.jsp, establezca la directiva como <%@ page isErrorPage="true" %>

+1

Como escribí: las definiciones de página de error en web.xml no funcionan para JSP. Ya tengo exactamente estas líneas en web.xml para detectar las excepciones lanzadas en Servlets y funciona bien allí, pero mi problema es el manejo de excepciones en JSP, no servlet. – kayahr

2

En lugar de setStatus(500), es mejor utilizar sendError(500) - hay algunas diferencias. La configuración en web.xml funciona bien con sendError, sin embargo, si no desea la configuración en web.xml, error-page de la directiva de la página, funcionó solo para excepciones para mí, no para códigos de error HTTP.

Cuestiones relacionadas