Servlet笔记之(三)

Servlet异常处理:

1:web应用中常见的几种异常

Http错误代码 可能产生的原因
401 用户权限不足
403 服务器已经结束客户端的请求,未作出相应的相应(等待客户端的进一步操作)
404 读取的文件不存在获取URL错误
408 链接超时
500

内部服务器错误,通常是由于程序撰写不佳,导致异常产生时未及时被截获

503

HTTP服务器过于忙碌,暂时无法提供服务

2:声明式异常处理

  • 声明式异常处理就是在web.xml中声明各种异常的处理方法,有可分为以下两类:
    • 处理HTTP异常
    • 处理Java异常
  • 声明式异常在web.xml中的配置
    • 声明式异常处理必须在web.xml中通过<error-page>进行设定
        <error-page>
            <error-code>404</error-code>
            <location>/error.jsp</location>
        </error-page>

3:程序化异常的处理

  1. 程序化异常处理就是在java应用程序内利用try-catch来截获可能抛出的异常,并决定各种异常的处理方式,特点如下:

                         (1) 通过try-catch语句,可以在应用程序内截获任何java异常
                         (2) 无需设定web.xml
                         (3) 异常由应用程序自行处理,与Servlet容器无关

  2. 程序化异常处理可分为两类:

                    (1) 在try-catch中直接处理异常
                    (2) 将异常转交给其他Servlet处理

4:声明式异常和程序化异常之间的比较

    1. 声明式异常的优点和缺点
      • 优点:

        (1)实现容易
        (2)可以处理HTTP错误与Java应用程序异常

      • 缺点

        (1)异常处理能力的弹性低
        (2)不容易找出异常发生的真正位置
        (3)不容易细分异常的等级

    2. 程序化异常的优点和缺点
      • 优点

        (1)容易了解异常的发生与处理的关系
        (2)较有弹性的异常处理能力

      • 缺点

        (1)在程序内可能要撰写大量的代码
        (2)无法处理HTTP错误

 

5:使用

声明式异常的处理

1:可以直接写一个展示错误的页面error.html在web.xml进行配置

2:或者编写一个用来处理错误的Servlet类来处理(重写HttpServlet类的service()方法。调用请求对象getAttribute()方法得到javax.servlet.error.status_code属性的值,当发生HTTP错误的时候, Servlet容器会自动将HTTP的错误代码作为javax.servlet.error.status_code 属性的值,保存在请求的对象中。部署好这个servlet。location修改为servlet的location)


    // HTTP协议的状态码
    Integer statusCode = (Integer)request.getAttribute("javax.servlet.error.status_code");
    out.println(String.format("status_code: %s", statusCode));
    // 未捕获的异常类名
    Class<?> exceptionType = (Class<?>)request.getAttribute("javax.servlet.error.exception_type");
    out.println(String.format("exception_type: %s", exceptionType));
    // 错误发生画面response.sendError设置的消息
    // 或者未捕获的异常的消息
    String message = (String)request.getAttribute("javax.servlet.error.message");
    out.println(String.format("message: %s", message));
    // 未捕获的异常
    Throwable throwable = (Throwable)request.getAttribute("javax.servlet.error.exception");
    out.println(String.format("Throwable: %s", throwable));
    // 当前请求URI
    String requestUri = (String)request.getAttribute("javax.servlet.error.request_uri");
    out.println(String.format("request_uri: %s", requestUri));
    // 错误画面的Servlet
    String servletName = (String)request.getAttribute("javax.servlet.error.servlet_name");
    out.println(String.format("servlet_name: %s", servletName));

Servlet笔记之(三)

上一篇:推荐一款python、excel集成的数据分析工具PyXLL-Jupyter!


下一篇:斐波那契数(Java)