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

最近工作中,社区为了提高用户感受,对三种异常(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("&amp;", "&").replaceAll("&", "&amp;");

%><!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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值