2011-08-15 18 views
110

Tôi đang sử dụng <error-page> phần tử trong web.xml để xác định các trang báo lỗi thân thiện khi người dùng gặp một lỗi nào đó chẳng hạn như lỗi với mã 404: Cách chỉ định trang lỗi mặc định trong web.xml?

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

Tuy nhiên, tôi muốn điều đó nếu người dùng không không đáp ứng bất kỳ mã lỗi nào được chỉ định trong <error-page>, người đó sẽ thấy trang lỗi mặc định. Làm cách nào tôi có thể thực hiện việc đó bằng cách sử dụng phần tử trong trang web web.xml?

+2

servletcontainer bạn đang sử dụng/nhắm mục tiêu gì và phiên bản servlet là 'web.xml' của bạn được khai báo? Chỉ có Servlet 3.0 một cách dễ dàng. – BalusC

+0

Tôi đang sử dụng Tomcat 6, servlet 2.5 – ipkiss

Trả lời

201

On Servlet 3.0 hoặc mới hơn, bạn chỉ có thể xác định

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

Nhưng khi bạn vẫn còn trên Servlet 2.5, không có cách nào khác hơn là xác định tất cả các lỗi HTTP chung riêng. Bạn cần phải tìm ra lỗi HTTP nào mà người dùng cuối có thể phải đối mặt. Trên một ứng dụng web barebones với ví dụ sử dụng xác thực HTTP, có danh sách thư mục bị vô hiệu hóa, sử dụng các servlet và mã tùy chỉnh có thể ném các ngoại lệ chưa được giải quyết hoặc không có tất cả các phương thức được triển khai, thì bạn muốn đặt nó cho các lỗi HTTP 401 , 403, 500 và 503 tương ứng.

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

Điều đó phải bao gồm những thông dụng nhất.

+0

Bạn có thể chỉ định trang lỗi chung và sau đó ghi đè các mã lỗi nhất định bằng thẻ ''? – Qix

+6

@Tomas: Tomcat guys có cùng một vấn đề với bạn. Đây là hư không theo nghĩa đen được đề cập trong spec, chỉ có hình 14-10 trong spec và tệp tin 'web.xml' XSD chứng minh rằng' 'và' 'trở thành tùy chọn thay vì bắt buộc. Xem [issue 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 chỉ định không có con số cho phần tử , do đó dán mã ở trên như trong một tệp web Servlet 2.5 sẽ gây ra xác thực XSD lỗi. Nếu tôi bình luận họ, mặc dù, nó hoạt động tốt, cảm ơn! –

15

Bạn cũng có thể làm điều gì đó như thế:

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

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

Đối với mã lỗi 403 nó sẽ trả lại 403.html trang, và cho bất kỳ mã lỗi khác, nó sẽ trả lại error.html trang.

0

Bạn cũng có thể chỉ định <error-page> cho trường hợp ngoại lệ sử dụng <exception-type>, ví dụ như dưới đây:

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

Hoặc ánh xạ một mã lỗi sử dụng <error-code>:

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

Tôi không thấy lý do nào để bỏ phiếu xuống. –