Servlet异常处理

Servlet 配置异常处理开发步骤
1.配置对应的异常处理Servlet的Java类
2.在部署文件web.xml中注册异常Servlet
3.在 web.xml 中使用 error-page 元素来指定对特定异常 或 HTTP 状态码 作出相应的 Servlet 调用

请求属性 - 错误/异常

属性描述
javax.servlet.error.status_code该属性给出状态码,状态码可被存储,并在存储为 java.lang.Integer 数据类型后可被分析。
javax.servlet.error.exception_type该属性给出异常类型的信息,异常类型可被存储,并在存储为 java.lang.Class 数据类型后可被分析。
javax.servlet.error.message该属性给出确切错误消息的信息,信息可被存储,并在存储为 java.lang.String 数据类型后可被分析。
javax.servlet.error.request_uri该属性给出有关 URL 调用 Servlet 的信息,信息可被存储,并在存储为 java.lang.String 数据类型后可被分析。
javax.servlet.error.exception该属性给出异常产生的信息,信息可被存储,并在存储为 java.lang.Throwable 数据类型后可被分析。
javax.servlet.error.servlet_name该属性给出 Servlet 的名称,名称可被存储,并在存储为 java.lang.String 数据类型后可被分析。

Servlet 错误处理程序实例
小案例让你对 Servlet 中的异常处理有基本的了解,您可以使用相同的概念编写更复杂的异常处理应用程序:

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "ExceptionHandlerServlet")
public class ExceptionHandlerServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取错误状态码
        Integer code=(Integer)req.getAttribute("javax.servlet.error.status_code");
        if(code!=null)resp.getWriter().println("<html><head><title>error</title></head><body><h1>"+code+"</h1></body></html>");
        //获取异常信息
        Throwable t = (Throwable)req.getAttribute("javax.servlet.error.exception");
        if(t!=null)resp.getWriter().println("<html><head><title>error</title></head><body><h1>"+t+"</h1></body></html>");
    }
}

在 web.xml 文件中添加如下配置来处理异常:

    <!-- servlet 定义 -->
    <servlet>
        <servlet-name>ExceptionHandlerServlet</servlet-name>
        <servlet-class>exveption.ExceptionHandlerServlet</servlet-class>
    </servlet>
    <!-- servlet 映射 -->
    <servlet-mapping>
        <servlet-name>ExceptionHandlerServlet</servlet-name>
        <url-pattern>/ErrorServlet.do</url-pattern>
    </servlet-mapping>

    <!-- error-code 相关的错误页面 -->
    <error-page>
        <error-code>404</error-code>
        <location>/ErrorServlet.do</location>
    </error-page>

    <!-- exception-type 相关的错误页面 -->
    <error-page>
        <exception-type>java.lang.NumberFormatException</exception-type>
        <location>/ErrorServlet.do</location>
    </error-page>

现在,尝试访问任意一个Servlet形成NumberFormatException,或者输入一个错误的URL。这将触发 Web 容器调用 ExceptionHandlerServlet 的 Servlet,并得到相应的响应消息。
例如,如果您输入了一个错误的 URL,那么它将显示下面的结果:

code:404

注意:
如果想对所有的异常有一个通用的错误处理程序,可以这样定义error-page:

<error-page>
    <exception-type>java.lang.Throwable</exception-type >
    <location>/ErrorServlet.do</location>
</error-page>

1.Servelt ExceptionHandlerServlet 与其他的 Servelt 的定义方式一样,且在 web.xml 中进行配置。
2.如果有任何错误状态代码出现,不管为 404(Not Found 未找到)或 403(Forbidden 禁止),则会调用 ExceptionHandlerServlet 的 Servlet。
3.如果 Web 应用程序抛出 NumberFormatException,那么 Web 容器会调用 ExceptionHandlerServlet 的 Servlet。您可以定义不同的错误处理程序来处理不同类型的错误或异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值