zoukankan      html  css  js  c++  java
  • 异常处理

    异常处理步骤:
    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的名字

  • 相关阅读:
    解决:npm中 下载速度慢 和(无法将“nrm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次)。
    maven(一) maven到底是个啥玩意~
    Luogu3959 NOIP2017宝藏(状压dp)
    Luogu3953 NOIP2017逛公园(最短路+拓扑排序+动态规划)
    Luogu3952 NOIP2017时间复杂度
    BZOJ4753 JSOI2016最佳团体(分数规划+树形dp)
    BZOJ1975 SDOI2010魔法猪学院(启发式搜索+最短路+堆)
    BZOJ4105 THUSC2015平方运算(线段树)
    BZOJ5109 CodePlus 2017大吉大利,晚上吃鸡!(最短路+拓扑排序+bitset)
    Luogu3731 HAOI2017新型城市化(二分图匹配+强连通分量)
  • 原文地址:https://www.cnblogs.com/shininguang/p/4922842.html
Copyright © 2011-2022 走看看