404、500、503错误的配置,提高用户使用感受
2008-10-28 16:59
225 查看
最近工作中,社区为了提高用户感受,对三种异常(404/500/503)提供统一的提示页面,同时对于404/500两种错误定义标准的日志输出格式。
适用于所有与业务相关的异常情况的处理,也就是说通过ExceptionResolver可以处理所有在应用程序中显式抛出的异常。例如当进行各种银行账户操作时,程序可能在不同位置抛出余额不足的异常,这时可通过ExceptionResolver将页面请求转发到统一的账户余额不足的错误显示页面
对于所有因为程序的不可预见原因引发的异常情况,应采用下面的异常处理页面进行处理
<%@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");
%>
错误信息的输出格式
类似于:
第一项: 错误代码(javax.servlet.error.status_code)
第二项: servlet名称(javax.servlet.error.servlet_name)
第三项: 请求的URI(javax.servlet.error.request_uri)
第四项: 异常的类名(javax.servlet.error.exception_type),只在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]
相关文章推荐
- 使用springmvc实现404,500的配置
- Log One(phpmyadmin中使用配置文件中定义的控制用户连接失败问题 :)
- 配置404页面,即.htaccess文件使用
- django的403/404/500错误自定义页面的配置
- Serv-U文件服务器用户安装配置使用手册
- 使用JNDI配置Tomcat数据源[提高访问数据库效率]
- Microsoft Visual Studio 2008使用向导配置个性化用户
- 使用e-tag来加快页面加载速度和提高用户体验
- QT5.7静态编译(使用VS2013与VS2015编译,XP可用,有详细configure脚本。VS下Qt插件的配置。编译选项加上-mp可以开启多线程编译,编译速度提高2倍以上)
- win 7 删除了用户文件夹后出现的&quot;你已使用临时配置文件登录&quot;提示的解决方法
- SharePoint 2010 错误:未配置缓存使用的超级用户帐户?
- 详解在使用CDN加速时Nginx获取用户IP的配置方法
- 解决用户使用临时配置文件登陆WIN7的问题
- Kubernetes用户指南(一)--快速开始、使用k8s配置文件
- Windows 7删除用户配置文件后使用临时配置文件
- 使用Open Live Writer配置CSDN及http500错误的解决
- 使用shell脚本分析网站日志统计PV、404、500等数据
- Kubernetes用户指南(一)--快速开始、使用k8s配置文件
- mongo使用java-spring时用户验证配置方法
- 产品应该努力提高用户使用的方便性