您的位置:首页 > 其它

404、500、503错误的配置,提高用户使用感受

2008-10-28 16:59 225 查看
最近工作中,社区为了提高用户感受,对三种异常(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>


503错误的配置

apache中http.conf的配置

ErrorDocument 503 http://i.kong.net/503.jsp[/code] 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: