今天接到个任务,配置平台404、500错误页面等。以前没做过,开始以为需要点时间才能搞定。最后发现好简单,做个记录
首先肯定要有404/500页面:
随后在web.xml配置一下:
如果需要拷贝代码复制下面的:
<error-page>
<error-code>404</error-code>
<location>/WEB-INF/jsp/404.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/WEB-INF/jsp/500.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/WEB-INF/jsp/500.jsp</location>
</error-page>
exception-type我使用的是java.lang.Throwable,当然也可以是Exception、NullPointerException等异常,出现什么异常类型就会跳转相应的页面。
1、不管是exception-type还是error-code,location指定的路径必须是/开头,也就是说它是对应web应用根的。tomcat默认的是webapp下。
2、一个error-page标签下只能有一个exception-type或error-code,我这里分开写了3个error-page。
3、exception-type比error-code优先级更高
4、容器会为错误页面提供一个exception对象,不过要想在错误页面里访问这个对象,必须在错误页面里指定isErrorPage属性: isErrorPage="true" 然后,在scriptlet中就可以使用隐式对象exception,在EL中可以使用EL隐式对象${pageContext.exception}
如果是jsp页面需要在页面加上isErrorPage="true"(html页面不用加),如果不加会跳到浏览器自身的404/500页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isErrorPage="true"%><% response.setStatus(HttpServletResponse.SC_OK);%>
随手一笔,错误之处还望指出
补充:
1、用ajax的时候,发生exception等错误不会跳页面,可能是因为ajax异步的原因,ajax还是会执行完并且不会跳转页面。像一下截图一样,返回出来的页面是500页面,但实际的页面还是ajax那个页面
上图最右侧那块是500页面的
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2、如果是像非异步普通请求,比如下面截图那种,就会跳转到500页面
3、如果是try {} catch (Exception e) {e.printStackTrace();}发生错误也不会跳转页面,进catch块
像上面1和3不跳转的,自己做处理或response.sendRedirect("/error/500");等!