最近工作中,社区为了提高用户感受,对三种异常(404/500/503)提供统一的提示页面,同时对于404/500两种错误定义标准的日志输出格式。
404与500错误的配置
请去掉程序中原来通过Spring的ExceptionResolver处理异常页面的配置,关于ExceptionResolver的适用性可参考下面的说明。
- 适用于所有与业务相关的异常情况的处理,也就是说通过ExceptionResolver可以处理所有在应用程序中显式抛出的异常。例如当进行各种银行账户操作时,程序可能在不同位置抛出余额不足的异常,这时可通过ExceptionResolver将页面请求转发到统一的账户余额不足的错误显示页面
- 对于所有因为程序的不可预见原因引发的异常情况,应采用下面的异常处理页面进行处理
web.xml的配置
增加如下代码片段:
<error-page>
<error-code>404</error-code>
<location>/指向/异常显示页面的地址</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/指向/异常显示页面的地址</location>
</error-page>
异常显示页面
可参考error_all.jsp
<%@page contentType="text/vnd.wap.wml;charset=UTF-8"%><?xml version="1.0" encoding="UTF-8"?><%
int statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
String message = (String) request.getAttribute("javax.servlet.error.message");
String servletName = (String) request.getAttribute("javax.servlet.error.servlet_name");
String uri = (String) request.getAttribute("javax.servlet.error.request_uri");
Throwable t = (Throwable) request.getAttribute("javax.servlet.error.exception");
Class exception = (Class) request.getAttribute("javax.servlet.error.exception_type");
if(statusCode == 500) {
LOGGER.error(statusCode + "|" + message + "|" + servletName + "|" + uri + "|" + exception.getName(), t);
}
else if(statusCode == 404) {
LOGGER.error(statusCode + "|" + message + "|" + servletName + "|" + uri);
}
String queryString = request.getQueryString();
String url = uri + (queryString == null || queryString.length() == 0 ? "" : "?" + queryString);
url = url.replaceAll("&", "&").replaceAll("&", "&");
%><!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1_1.dtd">
<wml>
<card title="页面<%=statusCode%>错误">
<p><%
if(statusCode == 404) {
%>对不起,暂时没有找到您所访问的页面地址,请联系管理员解决此问题.<br/><br/>
<a href="<%=url%>">刷新,看看是否能访问了</a><br/><%
}
else {
%>对不起,您访问的页面出了一点内部小问题,请<a href="<%=url%>">刷新一下</a>重新访问,或者先去别的页面转转,过会再来吧~<br/><br/><%
}
%><anchor>返回刚才页面<prev/></anchor><br/>
<a href="http://i.kong.net/<%=request.getAttribute("uid") != null ? "?uid=" + request.getAttribute("uid") : ""%>">返回空中家园首页</a><br/>
<br/>
</p>
</card>
</wml>
<%!
private static final org.apache.commons.logging.Log LOGGER = org.apache.commons.logging.LogFactory.getLog("Page_Errors");
%>
- 错误信息的输出格式
类似于:
ERROR 08/10/27 15:22:58 Page_Errors - 404|resin-jsp|/f/s.jsp
ERROR 08/10/27 15:25:03 Page_Errors - 500|null|/f/i/g.jsp|java.lang.RuntimeException
- 第一项: 错误代码(javax.servlet.error.status_code)
- 第二项: servlet名称(javax.servlet.error.servlet_name)
- 第三项: 请求的URI(javax.servlet.error.request_uri)
- 第四项: 异常的类名(javax.servlet.error.exception_type),只在500时出现
log4j的配置
<appender name="PAGE_ERROR_ROLLING" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="实际的日志路径" />
<param name="Encoding" value="GBK" />
<param name="ImmediateFlush" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p %d{yy/MM/dd HH:mm:ss} - %m%n" />
</layout>
</appender>
<logger name="Page_Errors">
<level value="ERROR" />
<appender-ref ref="PAGE_ERROR_ROLLING" />
</logger>
分享到:
相关推荐
500系列错误则反映了服务器端的问题,如服务器内部错误(500 Internal Server Error)、服务器过载(503 Service Unavailable)或网关错误(502 Bad Gateway)。这些错误通常意味着服务器无法完成请求,可能是由于...
nginx错误页面包括404 403 500 502 503 504等页面,只需都跳转到400页面,配置过程 error_page 404 403 500 502 503 504 /404.html; location = /404.html { root /usr/local/nginx/html; }
从400系列到500系列的错误代码涵盖了从客户端错误到服务器错误的各种情况,以下是对这些代码的详细解读: ### 400系列:客户端错误 #### 400 Bad Request 表示请求的语法错误,服务器无法理解。 #### 401 ...
ASP代码中的语法错误、运行时错误或服务器配置问题都可能导致500错误。查看服务器日志以获取更具体的错误信息。 6. 错误代码 500.19:Configuration Error 这个错误通常与IIS配置有关,可能是由于Web.config文件中...
这种情况可能由服务器软件的编程错误、配置问题或其他内部故障引起。 #### 503 - 服务不可用 当服务器因为过载、维护或者其他原因暂时无法处理客户端的请求时,它将返回503状态码。这通常伴随着一个Retry-After头部...
- **401.3 Unauthorized: ACL Configuration Error**:访问控制列表配置错误导致认证失败。 - **401.4 Unauthorized: Authorization Filter**:客户端请求未经授权,需要进一步的权限筛选。 - **401.5 Unauthorized:...
例如,404错误可能需要检查URL是否正确,500错误可能涉及服务器配置或代码错误。查看服务器日志,尤其是错误日志,通常能提供更详细的错误信息,帮助定位问题所在。 在"HTTP请求错误信息.doc"文档中,可能会包含...
这些错误不仅包括编译错误、运行时错误,还有可能是由于服务器配置不当导致的问题。本文将重点介绍与JSP相关的常见错误及其解决办法,特别是针对Tomcat服务器的报错情况。 #### 二、常见错误及原因分析 ##### 1. *...
- **500 Internal Server Error**: 服务器内部错误,可能是由于服务器端的配置问题或程序错误。 - **502 Bad Gateway**: 微博API网关错误,通常是由于上游服务器不可达或响应异常。 - **503 Service Unavailable**: ...
- **500.100** - 内部服务器错误 - ASP错误。 - **500-11** - CGI错误。 - **500-12** - 应用程序错误事件。 - **500-13** - 请求的资源由于CPU使用量过大而无法使用。 - **500-14** - 应用程序无法执行。 - **500-...
本文将详细介绍一系列常见的 HTTP 错误代码,包括 400 系列(客户端错误)和 500 系列(服务器错误),以及部分 1xx、2xx 和 3xx 系列的状态码。 #### 二、400 系列错误(客户端错误) 1. **HTTP 400 Bad Request*...
服务器错误通常指的是由服务器端引起的错误,例如服务器暂时不可用或者内部配置问题等。 - **500 Internal Server Error**:表示服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。更具体的错误包括...
1. **400 Bad Request**:此错误通常表示客户端发送的请求格式不正确或包含了服务器无法理解的数据。检查请求头、URL或查询字符串是否有误。 2. **401 Unauthorized**:用户未经过身份验证或提供的凭据无效。检查...
- **500-100.asp 错误**:特定于ASP的错误代码,指示ASP应用程序中的问题。 - **501 Not Implemented**: 未实现。服务器不支持请求的功能或方法。 - **502 Bad Gateway**: 错误网关。作为中间人的服务器从上游...
- **正确配置404错误页面**:对于已存在的信息,如果路径改变导致访问不了,应在服务器中定义404错误指向一个动态页面,并使用301跳转到新的地址。 - **避免返回200状态码**:如果404页面被配置为返回200状态码,...
提供的两个文档《mm7api_yhsc.doc》和《caixin902.doc》可能包含更深入的MM7协议详解和具体实现细节,例如API接口定义、错误处理示例以及可能的配置选项。通过查阅这些文档,开发者可以更好地理解和应用MM7协议,...
- 500 Internal Server Error:服务器内部错误,无法完成请求。 - 501 Not Implemented:服务器不支持请求的功能,无法完成请求。 - 502 Bad Gateway:作为网关或代理工作的服务器从上游服务器收到无效响应。 - ...
- **400 错误的请求**:服务器无法理解请求语法。 - **401 访问被拒绝** - **401.1 登录失败**:客户端尝试登录失败。 - **401.2 服务器配置导致登录失败**:服务器配置问题导致的登录失败。 - **401.3 由于ACL对...
#### 错误代码 400 - Bad Request **描述**:客户端发送了一个有语法错误的请求,或者请求无法被服务器理解。 **常见子错误**: - **401.1**:由于无效的客户端证书而导致的身份验证失败。 - **401.2**:客户端未...