2012-07-25 11 views
6

Bueno, esto debería haber sido lo suficientemente simple. He modificado web.xml del proyecto con el fin de mostrar mi propia página de error de 500 de:Tomcat: página de error personalizado que no funciona

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

Entonces escribió el servlet sencilla con el fin de probarlo:

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

La página personalizada (que es ubicado en el directorio raíz) luego se ignora completamente y en su lugar obtengo la página de error predeterminada de Tomcat.

Estoy usando la versión de Tomcat 6 que viene con el depurador de MyEclipse. He triplicado; he comprobado esto para ver si hay errores tipográficos, pero no puedo encontrar nada inusual. Me pregunto si la etiqueta de error debe estar en una determinada parte del documento. ¿Alguien sabe lo que podría estar yendo mal?

* Editar: Este es el web.xml completo que fue solicitado:

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

¿qué quiere decir con ** Obtengo la página de error predeterminada de Tomcat ** => una página 404? – mabbas

+0

No, no es un 404 como en "no se encontró la página de error", es la página normal de 500 que se mostró antes de cambiar web.xml – JayPea

+0

y tu la página 'error.jsp' está directamente debajo de la carpeta' webapp' ? – mabbas

Respuesta

2
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

enviará un Reponse con el estado HTTP 500. Esto está indicando un error interno, pero no emite uno en su aplicación.

Trate

throw new ServletException(); 

lugar y verá su configuración está funcionando como se esperaba.

+0

Gracias! Eso fue todo, sabía que tendría que ser algo muy simple.Parece que la página se abre desde la URL actual porque se muestra sin el CSS y las imágenes, pero supongo que usaré las rutas absolutas. – JayPea

0

¿Cómo es tu web.xml como? ¿Particularmente el mapeo de servlet/filtro? Puede necesitar agregar <dispatcher>ERROR</dispatcher> a su mapeo de servlet/filtro.

+0

Gracias, déjame intentar eso entonces. Agregué el web.xml completo arriba. – JayPea

+0

Esto no se aplica si no estoy usando filtros ¿no? – JayPea

+0

Agregué un filtro para ver si podía redirigir a mi página de error manualmente, pero * ERROR * también se ignora. Si uso * SOLICITUD * Puedo hacer que el filtro se ejecute, de lo contrario, nunca se golpeará el punto de ruptura. Es uno de esos errores que tiene menos sentido cuanto más investigas. – JayPea

15

En el servlet, debe llamar:

response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

En lugar de:

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); 

El setStatus se utiliza para establecer el código de estado de retorno cuando no hay error (por ejemplo, de los códigos de estado SC_OK o SC_MOVED_TEMPORARILY). Si hay un error, se debe usar el método sendError en su lugar.

+4

Esta es la respuesta correcta. –

+2

Sí, esta es la respuesta correcta. –

Cuestiones relacionadas