Come specificare la pagina di errore predefinita in web.xml?


138

Sto usando <error-page>element in web.xml per specificare la pagina di errore descrittiva quando l'utente riscontra un certo errore come errore con codice 404:

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

Tuttavia, desidero che se l'utente non soddisfa alcun codice di errore specificato in <error-page>, dovrebbe visualizzare una pagina di errore predefinita. Come posso farlo usando l'elemento in web.xml ?


2
Quale servletcontainer stai utilizzando / targeting e in quale versione servlet sei web.xmldichiarato? C'è solo dal Servlet 3.0 un modo semplice.
BalusC,

Sto usando Tomcat 6, servlet 2.5
ipkiss

Risposte:


240

Su Servlet 3.0 o versioni successive potresti semplicemente specificare

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

Ma poiché sei ancora su Servlet 2.5, non c'è altro modo che specificare ogni errore HTTP comune individualmente. È necessario capire quali errori HTTP potrebbero eventualmente incontrare l'utente finale. Su una webapp barebone, ad esempio con l'uso dell'autenticazione HTTP, con un elenco di directory disabilitato, utilizzando servlet personalizzati e codice che può eventualmente generare eccezioni non gestite o non ha implementato tutti i metodi, ti consigliamo di impostarlo per errori HTTP 401 , 403, 500 e 503 rispettivamente.

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

Quello dovrebbe coprire i più comuni.


È possibile specificare una pagina di errore generale e quindi sostituire determinati codici di errore con il <error-code>tag?
Qix - MONICA È STATA MISTREATA il

6
@Tomas: Tomcat ragazzi ha avuto lo stesso problema come te. Questo non è letteralmente menzionato nelle specifiche, solo la figura 14-10 nelle specifiche e il web.xmlfile XSD lo dimostrano <error-code>e sono <exception-type>diventati opzionali anziché richiesti. Vedi numero 52135 .
BalusC

java.sun.com/xml/ns/javaee/web-app_2_5.xsd non specifica alcun figlio <description> per l'elemento <error-page>, quindi incollare il codice sopra così com'è in un web.xml Servlet 2.5 causerà XSD errori di validazione. Se li commento, però, funziona bene, grazie!
László van den Hoek,

1
@BalusC: dove dovrebbe essere collocata la pagina general-error.html (menzionata nella tua risposta), all'interno di WEB-INF? Ho uno strano problema con il servlet 2.5 in cui per l'errore HTTP 403, ho creato una definizione <error-page> e la pagina error403.jsp si trova all'interno del WEB-INF e per questo motivo la pagina error403.jsp viene caricata quando delle risorse si tenta di accedere ma le immagini e i css all'interno di error403.jsp non vengono caricati facendo apparire la pagina fuori posto.
Jayy,

@Kaipa: basta usare i percorsi relativi all'URL invece dei percorsi relativi al contenuto web alle risorse CSS / JS / image. Molti avviatori pensano erroneamente che quelle risorse siano risolte sul lato server, ma in realtà sono risolte sul lato client. Vedere anche stackoverflow.com/questions/3655316/...
BalusC

23

Puoi anche fare qualcosa del genere:

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

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

Per il codice di errore 403 restituirà la pagina 403.html e per qualsiasi altro codice di errore restituirà la pagina error.html.


8

Puoi anche specificare le <error-page>eccezioni usando <exception-type>, ad esempio, di seguito:

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

O mappa un codice di errore usando <error-code>:

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.