2012-07-25 28 views
6

Bu yeterince basit olmalıydı. olan (Tomcat: Özel hata sayfası çalışmıyor

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

özel bir sayfa:

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

Sonra onu sınamak için en basit sunucu uygulamasını yazdı: Ben 500 en için kendi hata sayfasını görüntülemek için projenin web.xml modifiye kök dizininde bulunan) sonra tamamen yok sayılır ve yerine varsayılan Tomcat hata sayfasını alır.

MyEclipse hata ayıklayıcısını içeren Tomcat 6 sürümünü kullanıyorum. Bunu yazım hataları için üç kez kontrol ettim, ama olağandışı bir şey bulamıyorum. hata sayfası etiketinin belgenin belirli bir kısmında olması gerekip gerekmediğini merak ediyorum. Neyin yanlış gidebileceğini bilen var mı?

* Düzenleme: Bu istendi tam web.xml edilir:

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

neyi kastediyorsunuz ** Bunun yerine varsayılan Tomcat hata sayfasını alıyorum ** => a 404 sayfası? – mabbas

+0

Nope, "Hata sayfası bulunamadı" gibi bir 404 değil, web.xml – JayPea

+0

değiştirilmeden önce gösterilen normal 500 sayfadır ve sayfanız 'error.jsp 'doğrudan' webapp' klasörünün altındadır ? – mabbas

cevap

2
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

http durumu Bu bir iç hata belirten 500'dür ile tepkisini daha gönderecek, ancak uygulamada bir teklifte etmez.

yerine

throw new ServletException(); 

deneyin ve beklendiği gibi yapılandırma çalıştığını göreceksiniz.

servlet'dir
+0

Teşekkürler! Öyleydi, bunun çok basit bir şey olması gerektiğini biliyordum.Görünen o ki, sayfa CSS ve görüntüler olmadan gösterildiğinden geçerli URL'den açılmış görünüyor, ama sanırım o zaman mutlak yolları kullanacağım. – JayPea

0

Ne web.xml neye benziyor? Özellikle sunucu/filtre eşleştirmesi? Servlet/filtre eşlemenize <dispatcher>ERROR</dispatcher> eklemeniz gerekebilir.

+0

Teşekkürler, o zaman deneyeyim. Yukarıdaki tam web.xml dosyasını ekledim. – JayPea

+0

Filtreler doğru kullanmıyorsam bu geçerli olmaz mı? – JayPea

+0

Hata sayfamı elle yönlendirip yönlendiremeyeceğimi görmek için bir filtre ekledim, ancak * HATA * da yoksayılıyor. * REQUEST kullanırsam * Filtrenin çalışmasını sağlayabilirim, aksi takdirde kırılma noktası asla vurulmaz. Araştırdığın şey daha az anlamlı olan hatalardan biri. – JayPea

15

, aramak gerekir: Yerine

response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

:

SetStatus hata (örneğin, için olduğunda dönüş durum kodu ayarlamak için kullanılır
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

durum kodları SC_OK veya SC_MOVED_TEMPORARILY). Bir hata varsa, bunun yerine sendError yöntemi kullanılmalıdır.

+4

Doğru cevap budur. –

+2

Evet, bu doğru cevap. –

İlgili konular