2012-07-25 35 views
6

Điều này cũng đủ đơn giản. Tôi sửa đổi web.xml của dự án để hiển thị trang báo lỗi của riêng mình cho 500:Tomcat: Trang lỗi tùy chỉnh không hoạt động

<error-page> 
    <error-code>500</error-code> 
    <location>/error.jsp</location> 
</error-page> 

Sau đó, tôi đã viết servlet đơn giản nhất để kiểm tra nó:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
} 

Các trang tùy chỉnh (đó là nằm ở thư mục gốc) sau đó hoàn toàn bị bỏ qua và tôi nhận được trang lỗi Tomcat mặc định thay thế.

Tôi đang sử dụng phiên bản Tomcat 6 đi kèm với trình gỡ lỗi của MyEclipse. Tôi đã kiểm tra gấp ba lần điều này cho lỗi chính tả, nhưng tôi không thể tìm thấy bất cứ điều gì bất thường. Tôi tự hỏi liệu thẻ lỗi có cần nằm trong một phần nhất định của tài liệu hay không. Có ai biết điều gì có thể xảy ra không?

* Chỉnh sửa: này được đầy đủ web.xml đã được yêu cầu:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="3.0" 

    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> 

<display-name></display-name> 

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>/js/base.js</url-pattern> 
     <url-pattern>/js/catalog.base.js</url-pattern> 
     <url-pattern>/js/minicatalog.base.js</url-pattern> 
     <url-pattern>/js/addresses.js</url-pattern> 
    </jsp-property-group> 
</jsp-config> 

<mime-mapping> 
    <extension>pdf</extension> 
    <mime-type>application/pdf</mime-type> 
</mime-mapping> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:/applicationContext.xml</param-value> 
</context-param> 

<!-- error-page> 
    <error-code>403</error-code> 
    <location>/index.jsp?redirect=1</location> 
</error-page--> 

<error-page> 
    <error-code>500</error-code> 
    <location>/error.jsp</location> 
</error-page> 

<!-- BASE --> 
<servlet> 
    <description>User entity methods.</description> 
    <display-name>User</display-name> 
    <servlet-name>UserServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.UserServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>UserServlet</servlet-name> 
    <url-pattern>/servlet/UserServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Person entity methods.</description> 
    <display-name>Person</display-name> 
    <servlet-name>PersonServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.PersonServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>PersonServlet</servlet-name> 
    <url-pattern>/servlet/PersonServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Company entity methods.</description> 
    <display-name>Company</display-name> 
    <servlet-name>CompanyServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.CompanyServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CompanyServlet</servlet-name> 
    <url-pattern>/servlet/CompanyServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Module entity methods.</description> 
    <display-name>Module</display-name> 
    <servlet-name>ModuleServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.ModuleServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ModuleServlet</servlet-name> 
    <url-pattern>/servlet/ModuleServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Profile entity methods.</description> 
    <display-name>Profile</display-name> 
    <servlet-name>ProfileServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.ProfileServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ProfileServlet</servlet-name> 
    <url-pattern>/servlet/ProfileServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Address entity methods.</description> 
    <display-name>Address</display-name> 
    <servlet-name>AddressServlet</servlet-name> 
    <servlet-class>com.sitei.base.servlet.AddressServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>AddressServlet</servlet-name> 
    <url-pattern>/servlet/AddressServlet</url-pattern> 
</servlet-mapping> 
<!-- END BASE --> 

<!-- PUSH --> 
<servlet> 
    <servlet-name>icepush</servlet-name> 
    <servlet-class>org.icepush.servlet.ICEpushServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>icepush</servlet-name> 
    <url-pattern>*.icepush</url-pattern> 
</servlet-mapping> 
<!-- END PUSH --> 

<!-- TRUCKS --> 
<servlet> 
    <description>Employee entity methods.</description> 
    <display-name>Employee</display-name> 
    <servlet-name>EmployeeServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.EmployeeServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>EmployeeServlet</servlet-name> 
    <url-pattern>/servlet/EmployeeServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Vehicle entity methods.</description> 
    <display-name>Vehicle</display-name> 
    <servlet-name>VehicleServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.VehicleServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>VehicleServlet</servlet-name> 
    <url-pattern>/servlet/VehicleServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>VehicleBrand entity methods.</description> 
    <display-name>VehicleBrand</display-name> 
    <servlet-name>VehicleBrandServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.VehicleBrandServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>VehicleBrandServlet</servlet-name> 
    <url-pattern>/servlet/VehicleBrandServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>Report methods.</description> 
    <display-name>Report</display-name> 
    <servlet-name>ReportServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.ReportServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ReportServlet</servlet-name> 
    <url-pattern>/servlet/ReportServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>ExpenseLog methods.</description> 
    <display-name>ExpenseLog</display-name> 
    <servlet-name>ExpenseLogServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.ExpenseLogServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ExpenseLogServlet</servlet-name> 
    <url-pattern>/servlet/ExpenseLogServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>IncomeLog methods.</description> 
    <display-name>IncomeLog</display-name> 
    <servlet-name>IncomeLogServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.IncomeLogServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>IncomeLogServlet</servlet-name> 
    <url-pattern>/servlet/IncomeLogServlet</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>FileExport methods.</description> 
    <display-name>FileExport</display-name> 
    <servlet-name>FileExportServlet</servlet-name> 
    <servlet-class>com.sitei.trucks.servlet.FileExportServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>FileExportServlet</servlet-name> 
    <url-pattern>/servlet/FileExportServlet</url-pattern> 
</servlet-mapping> 
<!-- END TRUCKS --> 

<session-config> 
    <session-timeout>15</session-timeout> 
</session-config> 

<!--security-constraint> 
    <web-resource-collection> 
     <web-resource-name>LOGIN</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint--> 

<welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
</welcome-file-list> 

+1

ý của bạn là gì ** Tôi nhận được trang lỗi Tomcat mặc định thay vì ** => trang 404? – mabbas

+0

Không, nó không phải là 404 như trong "trang lỗi không được tìm thấy", đó là 500 trang thông thường được hiển thị trước khi tôi thay đổi web.xml – JayPea

+0

và trang của bạn 'error.jsp' nằm ngay dưới thư mục' webapp' ? – mabbas

Trả lời

2
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

sẽ gửi phản hồi với trạng thái http 500. Đây là lỗi nội bộ, nhưng không phát hành lỗi trong ứng dụng của bạn.

Hãy thử

throw new ServletException(); 

thay vào đó và bạn sẽ thấy cấu hình của bạn đang làm việc như mong đợi.

+0

Cảm ơn! Đó là nó, tôi biết rằng nó sẽ phải là một cái gì đó rất đơn giản.Dường như trang được mở từ URL hiện tại vì nó được hiển thị mà không có CSS ​​và hình ảnh, nhưng tôi đoán tôi sẽ chỉ sử dụng đường dẫn tuyệt đối sau đó. – JayPea

0

không web.xml của bạn trông như thế nào? Đặc biệt là sơ đồ bộ lọc/bộ lọc? Bạn có thể cần phải thêm <dispatcher>ERROR</dispatcher> vào bản đồ servlet/bộ lọc của mình.

+0

Cảm ơn, hãy để tôi thử điều đó. Tôi đã thêm tệp web.xml đầy đủ ở trên. – JayPea

+0

Điều này không áp dụng nếu tôi không sử dụng bộ lọc phải không? – JayPea

+0

Tôi đã thêm bộ lọc để xem liệu tôi có thể chuyển hướng đến trang lỗi của mình theo cách thủ công hay không, nhưng * ERROR * cũng bị bỏ qua. Nếu tôi sử dụng * REQUEST * Tôi có thể làm cho bộ lọc chạy, nếu không điểm ngắt sẽ không bao giờ bị nhấn. Đó là một trong những lỗi khiến bạn ít hiểu hơn. – JayPea

15

Trong servlet, bạn nên gọi:

response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

Thay vì:

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

Các setStatus được sử dụng để thiết lập các mã trạng thái trở lại khi không có lỗi (ví dụ, cho mã trạng thái SC_OK hoặc SC_MOVED_TEMPORARILY). Nếu có lỗi, phương pháp sendError sẽ được sử dụng thay thế.

+4

Đây là câu trả lời đúng. –

+2

Có, đây là câu trả lời đúng. –

Các vấn đề liên quan