异常处理步骤:
1、将异常转换为非强制捕获型异常
2、将异常向上抛出,作统一处理
3、给用户做出友好提示并通知管理员
自定义异常使得该异常继承自RuntimeException,重写该异常中的构造方法,带参数和不带参数的方法都要写
public class DataAccessException extends RuntimeException {
private static final long serialVersionUID = 1L;
/ DateAccessException无参数的构造方法 /
public DataAccessException() {
super();
}
/ DataAccessException有Message参数的构造方法,用来当依然发生的时候要写的值 /
public DataAccessException(String message) {
super(message);
}
/ DataAccessException有Message和Throwable接口作为参数的构造方法*/
public DataAccessException(String message, Throwable cause) {
super(message, cause);
}
/ DataAccessException中Throwable作为参数的构造方法*/
public DataAccessException(Throwable cause) {
super(cause);
}
}
在DbHelp中原本e.printStackTrace()改写成throw new DataAccessException(message,e);
这样的话,当发生异常的时候就会在用户访问的页面留下异常的错误信息,这时候要友好的显示异常错误信息,并将异常通知给管理员。
配置错误页
根据http code值来配置错误页
<error-page>
<error-code>500</error-code>
<locations>/WEB-INF/views/error/500.jsp</locations>
</error-page>
根据异常来配置错误页
<error-page>
<exception-type>DataAccessException</exception-type>
<locations>/WEB-INF/views/error/dataaccessexception.jsp</locati
ons>
</error-page>
当既是500又是dataaccessexception的时候就会找更具体的错误,显示DataAccessException.jsp,而不会显示500.jsp
错误页
在errorpage页面的page指令中声明isErrorPage = true;在这个页面就刻意使用JSP的一个内置对象Exception,这个内置对象只有在isErrorPage的属性为true的时候才能使用。
错误页内容
<%@ page language="java" import="java.util. " isErrorPage="true" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<title>500 page</title>
</head>
<body>
<%
//这段代码在IDE中会被标记为deadcode,加上这句会增加程序的健壮性,防止当程序员忘记在指令中添加isErrorPage属性
Throwable th = null;
if(exception!= null){
th = exception;
}
if(request.getAttribute("javax.servlet.error.exception") != null){
th = (Throwable)request.getAttribute("javax.servlet.error.exception");
}
if(th!= null){
out.print(th.getMessage());
}
%>
服务器忙,请稍后!
</body>
</html>
javax.servlet.error.status_code: Integer HTTP协议的状态代码
javax.servlet.error.exception_type: Class 未捕获异常的Class类的对象
javax.servlet.error.message: String 传递给sendError()方法的消息
javax.servlet.error.exception: Throwable 调用错误页面的未捕获异常
javax.servlet.error.request_uri: String 当前请求的URI
javax.servlet.error.servlet_name: String 导致错误页面被调用的Servlet的名字