Web.xml dosyasında varsayılan hata sayfası nasıl belirtilir?


138

Kullanıcı 404 kodu ile hata gibi belirli bir hatayla karşılaştığında kolay hata sayfasını belirtmek için web.xml<error-page> öğesinde kullanıyorum :

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

Ancak, kullanıcı belirtilen herhangi bir hata kodunu karşılamıyorsa <error-page>, varsayılan bir hata sayfası görmesi gerektiğini istiyorum. Bunu web.xml'deki öğeyi kullanarak nasıl yapabilirim ?


2
Hangi sunucu uygulaması kapsayıcısını / hedeflemeyi kullanıyorsunuz ve hangi sunucu uygulaması sürümünü web.xmlbeyan ediyorsunuz ? Sadece Servlet 3.0'dan bu yana kolay bir yol var.
BalusC

Tomcat 6, sunucu uygulaması 2.5 kullanıyorum
ipkiss

Yanıtlar:


240

Servlet 3.0 veya daha yeni sürümlerde

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

Ancak hala Servlet 2.5'te olduğunuz için, her yaygın HTTP hatasını ayrı olarak belirtmekten başka bir yol yoktur. Son kullanıcının hangi HTTP hatalarıyla karşılaşabileceğini bulmanız gerekir. Örneğin HTTP kimlik doğrulaması kullanımı, devre dışı bırakılmış bir dizin listesi olması, işlenmeyen özel durumlar atabilecek veya tüm yöntemlerin uygulanmadığı özel sunucu uygulamaları ve kod kullanan bir barebone web uygulamasında, HTTP hataları için ayarlamak istiyorsunuz 401 403, 500 ve 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>

Bu en yaygın olanları kapsamalıdır.


Genel bir hata sayfası belirtebilir ve ardından <error-code>etiketi ile belirli hata kodlarını geçersiz kılabilir misiniz?
Qix - MONICA

6
@Tomas: Tomcat'lerin sizinle aynı sorunu vardı. Bu tam anlamıyla spesifikasyonda belirtilmemiş, spesifikasyondaki sadece şekil 14-10 ve web.xmlXSD dosyası bunu kanıtlıyor <error-code>ve <exception-type>yerine isteğe bağlı hale geldi. Bkz. Sayı 52135 .
BalusC

java.sun.com/xml/ns/javaee/web-app_2_5.xsd , <error-page> öğesi için <açıklama> alt öğesi belirtmediğinden, yukarıdaki kodu bir Servlet 2.5 web.xml dosyasına olduğu gibi yapıştırmak XSD'ye neden olur doğrulama hataları. Onlara yorum yaparsam, iyi çalışıyor, teşekkürler!
László van den Hoek

1
@BalusC: WEB-INF içine genel error.html sayfası (cevabınızda belirtilmiştir) nereye yerleştirilmelidir? HTTP Hatası 403 için bir <error-page> tanımı oluşturduğum ve error403.jsp sayfası WEB-INF içinde oturuyor ve bu nedenle error403.jsp sayfası yüklendiğinde garip bir sorunum var kaynakların erişimine çalışıldı, ancak error403.jsp içindeki görüntüler ve css yüklenmedi ve sayfanın yanlış görünmesine neden oldu.
Jayy

@Kaipa: CSS / JS / resim kaynaklarına web içeriklerine göre yollar yerine URL'ye göre yollar kullanın. Birçok başlangıç, bu kaynakların sunucu tarafında çözüldüğünü, ancak aslında istemci tarafında çözüldüğünü düşünüyor. Ayrıca bkz. Stackoverflow.com/questions/3655316/…
BalusC

23

Bunun gibi bir şey de yapabilirsiniz:

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

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

Hata kodu 403 için, sayfa 403.html'yi döndürür ve diğer hata kodları için sayfa error.html dosyasını döndürür.


8

<error-page>İstisnalar için <exception-type>aşağıdakileri kullanarak da belirtebilirsiniz : örneğin:

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

Veya aşağıdakileri kullanarak bir hata kodu eşleyin <error-code>:

<error-page>
    <error-code>404</error-code>
    <location>/errorpages/404error.html</location>
</error-page>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.