Java Tomcat:自定义错误页不工作

Java Tomcat:自定义错误页不工作,java,eclipse,tomcat,web.xml,Java,Eclipse,Tomcat,Web.xml,这应该很简单。我修改了项目的web.xml,以便显示我自己的错误页面500秒: <error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> 然后完全忽略自定义页面(位于根目录中),取而代之的是默认的Tomcat错误页面 我使用的是MyEclipse调试器附带的Tomcat6版本。我已经检查了三

这应该很简单。我修改了项目的web.xml,以便显示我自己的错误页面500秒:

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>
然后完全忽略自定义页面(位于根目录中),取而代之的是默认的Tomcat错误页面

我使用的是MyEclipse调试器附带的Tomcat6版本。我已经检查了三倍,但是我没有发现任何异常。我想知道错误页面标签是否需要在文档的某个部分。有人知道会出什么问题吗

*编辑: 这是请求的完整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>

/js/base.js
/js/catalog.base.js
/js/minicatalog.base.js
/js/addresses.js
pdf
申请表格/pdf
org.springframework.web.context.ContextLoaderListener
上下文配置位置
类路径:/applicationContext.xml
500
/error.jsp
用户实体方法。
使用者
用户servlet
com.sitei.base.servlet.UserServlet
用户servlet
/servlet/UserServlet
个人实体方法。
人
人事服务
com.sitei.base.servlet.PersonServlet
人事服务
/servlet/PersonServlet
公司实体法。
单位
公司小酒店
com.sitei.base.servlet.CompanyServlet
公司小酒店
/servlet/CompanyServlet
模块实体方法。
模块
模服务器
com.sitei.base.servlet.ModuleServlet
模服务器
/servlet/ModuleServlet
配置文件实体方法。
轮廓
ProfileServlet
com.sitei.base.servlet.ProfileServlet
ProfileServlet
/servlet/ProfileServlet
地址实体方法。
地址
AddressServlet
com.sitei.base.servlet.AddressServlet
AddressServlet
/servlet/AddressServlet
冰推
org.icepush.servlet.ICEpushServlet
1.
冰推
*.冰推
雇员实体方法。
雇员
雇员服务
com.sitei.trucks.servlet.EmployeeServlet
雇员服务
/servlet/EmployeeServlet
车辆实体方法。
车辆
汽车服务
com.sitei.trucks.servlet.VehicleServlet
汽车服务
/servlet/VehicleServlet
汽车品牌实体方法。
汽车品牌
汽车品牌
com.sitei.trucks.servlet.VehicleBrandServlet
汽车品牌
/servlet/VehicleBrandServlet
报告方法。
报告
ReportServlet
com.sitei.trucks.servlet.ReportServlet
ReportServlet
/servlet/ReportServlet
ExpenseLog方法。
ExpenseLog
ExpenseLogServlet
com.sitei.trucks.servlet.ExpenseLogServlet
ExpenseLogServlet
/servlet/ExpenseLogServlet
IncomeLog方法。
不和谐
不和谐的
com.sitei.trucks.servlet.IncomeLogServlet
不和谐的
/servlet/IncomeLogServlet
文件导出方法。
文件导出
FileExportServlet
com.sitei.trucks.servlet.FileExportServlet
FileExportServlet
/servlet/FileExportServlet
15
index.jsp

您的web.xml是什么样子的?特别是servlet/过滤器映射?您可能需要将
ERROR
添加到servlet/过滤器映射中

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
将发送http状态为500的响应。这说明了一个内部错误,但不会在应用程序中发出错误

试一试


相反,您将看到您的配置按预期工作

在servlet中,您应该调用:

response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
而不是:

response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
setStatus用于在没有错误时设置返回状态代码(例如,
对于状态代码
SC\u OK
SC\u临时移动
)。如果有错误,应该使用
sendError
方法。

你说**我得到默认的Tomcat错误页**=>404页是什么意思?不,它不是“找不到错误页”中的404页,这是我更改web.xml之前显示的常规500页,您的页面
error.jsp
直接位于
webapp
文件夹下?是的,error.jsp页面位于根文件夹中。servlet不是,但我想它不会有什么不同。是的,如果我直接访问它,它会工作。谢谢,让我试试。我在上面添加了完整的web.xml。我添加了一个过滤器,以查看是否可以手动重定向到错误页面,但错误也会被忽略。如果我使用REQUEST,我可以让过滤器运行,否则将永远不会达到断点。这是那些你调查得越多就越没有意义的错误之一。谢谢!就是这样,我知道这必须是非常简单的事情。看起来页面是从当前URL打开的,因为它没有显示CSS和图像,但我想我会使用绝对路径。
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);