在公司接了错误页面的跳转问题,对错误页面统一控制,今天做了一天的整理,将我所能知道的东西联合起来。希望能在这一篇文章中就能找到自己想要的东西,不必再去百度了。
先整理一下思路,在这些页面错误或者异常会给客户的体验很不好,必须对出现的错误页面进行调整。
一般错误有异常、404、403、500这几个为主要的错误页面,异常和404更是最常见的错误。
对于异常来说,这个太多了,如果不同的异常就要一个页面那多不胜数,在这里不对异常进行详细解答。
分析一下错误:
404 未能找到相应地址
500:系统内部错误
403现在很少见了,一般权限都会控制很好。
就以404的处理为例
整理一下思路:
需要我们处理错误的时候有哪些
第一:页面找不到
第二:action请求失败
第三:action请求方法失败
若是第一,则错误码首先被web.xml拦截,不会被struts处理
若是第二,第三会报出struts异常
因此有了以下处理方式:
1.第一种方式
在web.xml中配置404状态码,进行最简单的配置。
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
这是异常和404的配置。
下面的errorpage方式是根据异常判断的。
2.需要更多的是在错误页面上进行展示是由于哪些问题引起的错误,至少在开发的过程中我们可以进行调试使用。
既然需要展示错误的信息, 那必不可免的要获取action中信息。
首先要清楚的明白404这个错误一旦发生会先后经历过怎样的演变。
当不能找到页面时发生404错误----->这时候是被web.xml拦截----->然后返回页面(此时是没有进入acion)
现在对action请求错误进行处理:
在web.xml对404拦截,并进入jsp判断,跳转到错误action处理方法,并进行不同的处理
web.xml
<error-page>
<error-code>404</error-code>
<location>/errorForward.jsp?code=404</location>
</error-page>
<error-page>
error.jsp
<script type="text/javascript">
window.onload = function() {
var code = '<%=request.getParameter("code")%>';
switch(code) {
case '404' :
window.top.location.replace("<%=request.getContextPath()%>/forward!notFound");
break;
// other case can be listed here
default:
window.top.location.replace("<%=request.getContextPath()%>/forward!notFound");
break;
}
};
</script>
跳转到Struts2的action处理拦截,在action里面进一步处理。
但是我们目前还有action未配置或者方法未配置,同样会出现异常页面,也是很不好的,此时我们需要修改action的配置文件
配置默认action,当找不到相应的action会自动进入此action中
<default-action-ref name="unknown" />
<action name="unknown" class="com.controller.UserController" method="unknown">
<result name="success">/404.jsp</result>
</action>
这样我们就对大部分的错误进行了处理,最大的处理了非友好界面。
也可以使用简写,也就是
<default-action-ref name="unknown" />
<action name="unknown">
<result>/404.jsp</result>
</action>
对于404的处理到此结束,如果有更好的建议,请告知与我,一起探讨,并更新此文章。