2011-08-15 14 views
110

estoy usando <error-page> elemento en web.xml para especificar la página de error amable cuando usuario se encuentra con un cierto error como error con el código de 404: ¿Cómo se especifica la página de error predeterminada en web.xml?

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

Sin embargo, quiero que si el usuario hace no cumple con ningún código de error especificado en <error-page>, él o ella debería ver una página de error predeterminada. ¿Cómo puedo hacer eso usando el elemento en el web.xml?

+2

Lo servletcontainer está usando/focalización y qué versión del servlet es su 'web.xml' declarado? Solo desde Servlet 3.0 es fácil. – BalusC

+0

Estoy usando Tomcat 6, servlet 2.5 – ipkiss

Respuesta

201

En Servlet 3.0 o posterior sólo podría especificar

<web-app ...> 
    <error-page> 
     <location>/general-error.html</location> 
    </error-page> 
</web-app> 

Pero como todavía estás en Servlet 2.5, no hay otra manera de especificar todos los errores HTTP común individualmente. Necesita averiguar qué errores de HTTP podría enfrentar el usuario final. En una aplicación web barebones con, por ejemplo, el uso de autenticación HTTP, tener una lista de directorio desactivada, usar servlets personalizados y código que posiblemente arroje excepciones no controladas o no tenga todos los métodos implementados, entonces le gustaría configurarlo para errores HTTP 401 , 403, 500 y 503 respectivamente.

<error-page> 
    <!-- Missing login --> 
    <error-code>401</error-code> 
    <location>/general-error.html</location> 
</error-page> 
<error-page> 
    <!-- Forbidden directory listing --> 
    <error-code>403</error-code> 
    <location>/general-error.html</location> 
</error-page> 
<error-page> 
    <!-- Missing resource --> 
    <error-code>404</error-code> 
    <location>/Error404.html</location> 
</error-page> 
<error-page> 
    <!-- Uncaught exception --> 
    <error-code>500</error-code> 
    <location>/general-error.html</location> 
</error-page> 
<error-page> 
    <!-- Unsupported servlet method --> 
    <error-code>503</error-code> 
    <location>/general-error.html</location> 
</error-page> 

Debe cubrir los más comunes.

+0

¿Puede especificar una página de error general y luego anular ciertos códigos de error con la etiqueta ''? – Qix

+6

@Tomas: los tipos de Tomcat tenían el mismo problema que tú. Esto no se menciona literalmente en ninguna especificación, solo la figura 14-10 en la especificación y el archivo XSD 'web.xml' demuestra que' 'y' 'son opcionales en lugar de obligatorios. Ver [problema 52135] (https://issues.apache.org/bugzilla/show_bug.cgi?id=52135). – BalusC

+0

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd especifica que no hay elemento secundario para el elemento , por lo que pegar el código anterior tal como está en un Servlet 2.5 web.xml provocará la validación de XSD errores Si los comento, funciona bien, ¡gracias! –

15

También puede hacer algo así:

<error-page> 
    <error-code>403</error-code> 
    <location>/403.html</location> 
</error-page> 

<error-page> 
    <location>/error.html</location> 
</error-page> 

Para el código de error 403 que devolverá el 403.html página, y para cualquier otro código de error se devolverá el error.html página.

0

También puede especificar <error-page> excepciones utilizando <exception-type>, por ejemplo por debajo:

<error-page> 
    <exception-type>java.lang.Exception</exception-type> 
    <location>/errorpages/exception.html</location> 
</error-page> 

O asignar un código de error usando <error-code>:

<error-page> 
    <error-code>404</error-code> 
    <location>/errorpages/404error.html</location> 
</error-page> 
+0

No veo ningún motivo para votar a la baja. –

Cuestiones relacionadas