2012-07-25 16 views
6

वैसे यह काफी सरल होना चाहिए था। मैं आदेश 500 के लिए अपने ही त्रुटि पृष्ठ प्रदर्शित करने के लिए परियोजना की web.xml संशोधित:टॉमकैट: कस्टम त्रुटि पृष्ठ काम नहीं कर रहा है

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

तो मैं इसे परीक्षण करने के लिए सबसे सरल सर्वलेट लिखा है:

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

कस्टम पृष्ठ (जो रूट निर्देशिका में स्थित) को पूरी तरह से अनदेखा किया जाता है और मुझे इसके बजाय डिफ़ॉल्ट टोमकैट त्रुटि पृष्ठ मिलता है।

मैं टॉमकैट 6 संस्करण का उपयोग कर रहा हूं जो MyEclipse के डीबगर के साथ आता है। मैंने टाइपो के लिए इसे तीन बार जांच लिया है, लेकिन मुझे कुछ असामान्य नहीं मिल रहा है। मैं सोच रहा हूं कि त्रुटि-पृष्ठ टैग दस्तावेज़ के एक निश्चित भाग में होना चाहिए या नहीं। क्या किसी को पता है कि क्या गलत हो सकता है?

* संपादित करें: यह पूर्ण web.xml कि अनुरोध किया गया था है:

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

** मेरा मतलब क्या है ** मुझे डिफ़ॉल्ट टॉमकैट त्रुटि पृष्ठ ** => 404 पृष्ठ मिलता है? – mabbas

+0

नहीं, यह 404 नहीं है जैसा कि "त्रुटि पृष्ठ नहीं मिला", यह नियमित 500 पृष्ठ है जो मैंने वेब.xml – JayPea

+0

को बदलने से पहले दिखाया था और आपका पृष्ठ 'error.jsp' सीधे 'वेबैप' फ़ोल्डर के नीचे है ? – mabbas

उत्तर

2
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

http स्थिति 500 ​​के साथ एक प्रतिक्रिया भेज देगा। यह एक आंतरिक त्रुटि बता रहा है, लेकिन आपके आवेदन में कोई जारी नहीं करता है।

बजाय

throw new ServletException(); 

प्रयास करें और आप अपने विन्यास अपेक्षा के अनुरूप काम कर रहा है देखेंगे।

+0

धन्यवाद! यही वह था, मुझे पता था कि यह कुछ बहुत आसान होना होगा।ऐसा लगता है कि पृष्ठ वर्तमान यूआरएल से खोला गया है क्योंकि यह सीएसएस और छवियों के बिना दिखाया गया है, लेकिन मुझे लगता है कि मैं केवल पूर्ण पथ का उपयोग करूंगा। – JayPea

0

क्या अपने web.xml कैसा दिखता है? विशेष रूप से सर्वलेट/फ़िल्टर मैपिंग? आपको अपने सर्वलेट/फ़िल्टर मैपिंग में <dispatcher>ERROR</dispatcher> जोड़ने की आवश्यकता हो सकती है।

+0

धन्यवाद, मुझे तब कोशिश करने दो। मैंने उपरोक्त पूर्ण web.xml जोड़ा। – JayPea

+0

यदि मैं फ़िल्टर का उपयोग नहीं कर रहा हूं तो यह लागू नहीं होता है? – JayPea

+0

मैंने यह देखने के लिए एक फ़िल्टर जोड़ा कि क्या मैं मैन्युअल रूप से अपने त्रुटि पृष्ठ पर रीडायरेक्ट कर सकता हूं, लेकिन * ERROR * को भी अनदेखा किया जाता है। अगर मैं * REQUEST * का उपयोग करता हूं * मैं फ़िल्टर चलाने के लिए प्राप्त कर सकता हूं, अन्यथा ब्रेक पॉइंट कभी भी हिट नहीं होगा। यह उन त्रुटियों में से एक है जो आपके द्वारा जांच की जाने वाली कम समझ में आती हैं। – JayPea

15

सर्वलेट में, आप कॉल करना चाहिए:

response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 
बजाय

:

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

setStatus जब कोई त्रुटि (उदाहरण के लिए, के लिए है वापसी स्थिति कोड स्थापित करने के लिए प्रयोग किया जाता है स्टेटस कोड SC_OK या SC_MOVED_TEMPORARILY)। यदि कोई त्रुटि है, तो sendError विधि का उपयोग इसके बजाय किया जाना चाहिए।

+4

यह सही जवाब है। –

+2

हां, यह सही जवाब है। –