Tomcat: Custom error page not working
这应该很简单。我修改了该项目的web.xml,以显示我自己的500页错误页面:
1 2 3 4 | <error-page> <error-code>500</error-code> <location>/error.jsp</location> </error-page> |
然后,我编写了最简单的servlet进行测试:
1 2 3 4 | protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } |
然后完全忽略自定义页面(位于根目录),而我得到默认的Tomcat错误页面。
我正在使用MyEclipse调试器随附的Tomcat 6版本。我已经三倍地检查了错别字,但没有发现任何异常。我想知道错误页面标记是否需要在文档的特定部分中。有谁知道可能出什么问题了吗?
*编辑:
这是所请求的完整的web.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | <?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> |
在servlet中,您应该调用:
1 | response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); |
而不是:
1 | response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); |
setStatus用于设置没有错误的返回状态代码(例如,
用于状态代码
1 | response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); |
将发出http状态为500的响应。这说明内部错误,但不会在您的应用程序中发出错误。
尝试
1 | throw new ServletException(); |
相反,您会看到您的配置按预期工作。
您的web.xml是什么样的?尤其是servlet /过滤器映射?您可能需要将