2011-08-15 16 views
110

Używam <error-page> elementem web.xml określić przyjazną stronę błędu, gdy użytkownik napotyka na pewien błąd takie jak błąd z kodem 404: Jak określić domyślną stronę błędu w pliku web.xml?

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

Chcę jednak, że jeśli użytkownik robi nie spełnia żadnego kodu błędu określonego w <error-page>, powinien wyświetlić domyślną stronę błędu. Jak mogę to zrobić, używając elementu w sieci Web: web.xml?

+2

Co servletcontainer używasz/kierowania i jaka wersja aplet jest Twój "web.xml" jest zadeklarowany? Od czasu Servlet 3.0 jest tylko prosty sposób. – BalusC

+0

Używam Tomcat 6, aplet 2.5 – ipkiss

Odpowiedz

201

Na Servlet 3.0 lub nowszej można po prostu określić

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

Ale nadal jesteś na Servlet 2.5, nie ma innej drogi niż określający każdy wspólny błąd HTTP indywidualnie. Musisz dowiedzieć się, jakie błędy HTTP może spotkać użytkownik końcowy. Na w podstawowe webapp na przykład z wykorzystaniem uwierzytelniania HTTP, mającego niepełnosprawnej listę katalogów, z wykorzystaniem niestandardowych serwletów i kod, który może ewentualnie rzucić nieobsługiwany wyjątków lub nie posiada zaimplementowane wszystkie metody, a następnie chcesz, aby ustawić go pod kątem błędów HTTP 401 Odpowiednio 403, 500 i 503.

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

Powinno to dotyczyć najpowszechniejszych.

+0

można określić ogólny stronę błędu, a następnie zastąpić niektóre kody błędów z '' tag? – Qix

+6

@ Tom: Chłopaki z Tomcat mieli ten sam problem co ty. To jest dosłownie nigdzie nie wspomniano w ciemno, tylko zorientować 14-10 w specyfikacji i 'web.xml' plik XSD dowodzi, że' 'i' 'stał opcjonalnie zamiast wymagane. Zobacz [numer 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 określa nie dziecka do elementu tak wklejenie powyższy kod postaci w serwlet 2,5 web.xml spowoduje walidacji XSD błędy. Jeśli je skomentuję, to działa dobrze, dzięki! –

15

Można też zrobić coś takiego:

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

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

dla kodu błędu 403 zwróci 403.html strony, i dla każdego innego kodu błędu zwróci error.html strony.

0

Można również określić <error-page> wyjątki korzystających <exception-type>, na przykład poniżej:

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

Albo mapować kod błędu używając <error-code>:

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

Nie widzę powodu, by głosować w dół. –

Powiązane problemy