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的名字

  • 相关阅读:
    如何将 Web 框架迁移到 Serverless
    Serverless + CVM 实战
    Serverless Registry 设计解读与实战
    使用 ServerLess 实现云原生
    腾讯云 Serverless 技术在「老司机汽车 app」的落地实践
    LeetCode 树 103. 二叉树的锯齿形层次遍历(双端队列 DFS的空间复杂度)
    LeetCode 树 116. 填充每个节点的下一个右侧节点指针(层序遍历 分层)
    LeetCode 树 230. 二叉搜索树中第K小的元素(二叉搜索树 中序遍历 剪枝)
    LeetCode 树 236. 二叉树的最近公共祖先(递归 深度优先搜索)
    LeetCode 树 102. 二叉树的层序遍历(广度优先搜索 深度优先搜索 队列)
  • 原文地址:https://www.cnblogs.com/shininguang/p/4922842.html
Copyright © 2011-2022 走看看