servlet_13 Servlet异常处理
来源:互联网 发布:苏57战斗机知乎 编辑:程序博客网 时间:2024/06/13 02:57
Servlet异常处理:
当一个Servlet抛出异常时,web容器在使用了exception-type元素的web.xml中搜索与异抛出常匹类型匹配的配置。必须在web.xml中使用error-page元素来指定对特定异常或HTTP状态码做出相应的Servlet调用。
web.xml配置例子:
<!-- servlet 定义 --><servlet> <servlet-name>ErrorHandler</servlet-name> <servlet-class>ErrorHandler</servlet-class></servlet><!-- servlet 映射 --><servlet-mapping> <servlet-name>ErrorHandler</servlet-name> <url-pattern>/ErrorHandler</url-pattern></servlet-mapping><!-- error-code 相关的错误页面 --><error-page> <error-code>404</error-code> <location>/ErrorHandler</location></error-page><error-page> <error-code>403</error-code> <location>/ErrorHandler</location></error-page><!-- exception-type 相关的错误页面 --><error-page> <exception-type> javax.servlet.ServletException </exception-type > <location>/ErrorHandler</location></error-page><error-page> <exception-type>java.io.IOException</exception-type > <location>/ErrorHandler</location></error-page>
<!-- 对所有的异常类型进行错误处理 --> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/ErrorHandle</location> </error-page>
关于web.xml异常处理注意点:
1.Servlet ErrorHandle与其他的Servlet的定义方式一样,且在web.xml中配置
2.如果有错误状态代码出现,不管为 404(Not Found 未找到)或 403(Forbidden 禁止),则会调用ErrorHandle Servlet
3.如果web应用程序抛出ServletException/IOException,则会调用ErrorHandle Servlet
请求属性-错误/异常:
以下是错误处理的Servlet可以访问的请求属性列表,用来分析错误/异常的性质
1.javax.servlet.error.status_code
该属性给出状态码,状态码可被存储,并在存储为 java.lang.Integer 数据类型后可被分析
2.javax.servlet.error.exception_type
该属性给出异常类型的信息,异常类型可被存储,并在存储为 java.lang.Class 数据类型后可被分析。
3.javax.servlet.error.exception
该属性给出异常产生的信息,信息可被存储,并在存储为 java.lang.Throwable 数据类型后可被分析。
4.avax.servlet.error.message
该属性给出确切错误消息的信息,信息可被存储,并在存储为 java.lang.String 数据类型后可被分析。
5.javax.servlet.error.request_uri
该属性给出有关 URL 调用 Servlet 的信息,信息可被存储,并在存储为 java.lang.String 数据类型后可被分析。
6.javax.servlet.error.servlet_name
该属性给出 Servlet 的名称,名称可被存储,并在存储为 java.lang.String 数据类型后可被分析。
Servlet错误处理程序实例:
package MyServlet;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.*;import java.io.IOException;/** * Created by 1192126986 on 2017/1/18. */@WebServlet(name = "ErrorHandle")//拓展HttpServlet类public class ErrorHandle extends HttpServlet { //POST请求处理方法 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } //GET请求处理方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求属性表-错误/异常 //属性javax.servlet.error.exception:给出异常产生的信息,被存储在java.lang.Throwable数据类型可分析 Throwable throwable=(Throwable) request.getAttribute("javax.servlet.error.exception"); //属性javax.servlet.error.status_code:给出状态码,存储在java.lang.Integer数据类型后可分析 Integer status=(Integer) request.getAttribute("javax.servlet.error.status_code"); //属性javax.servlet.error.servlet_name:给出Servlet的名称,存储在java.lang.String数据类型后可分析 String servletName=(String)request.getAttribute("javax.servlet.error.servlet_name"); if(servletName==null){ servletName="Unknowed"; } //属性javax.servlet.error.request_uri:给出有关URL调用Servlet的信息 String uri=(String)request.getAttribute("javax.servlet.error.request_uri"); if(uri==null){ uri="Unknowwed"; } response.setContentType("text/html;charset=UTF-8"); PrintWriter out=response.getWriter(); String title = "菜鸟教程 Error/Exception 信息"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n"); out.println("<h1>异常信息实例演示</h1>"); //标签<a>定义超链接,用于从一张页面链接到另一张页面 最重要的属性:href 值:url 描述:规定链接指向的页面的url if(status==null && throwable==null){ out.println("<h2>错误信息丢失</h2>"); out.println("请返回 <a href=\"" + response.encodeURL("http://localhost:8080/") + "\">主页</a>。"); }else if(status!=null){ out.println("错误代码:"+status); }else{ out.println("<h2>错误信息</h2>"); out.println("Servlet name"+servletName); out.println("异常类型:"+throwable.getClass().getName()); out.println("异常信息:"+throwable.getMessage()); out.println("请求URI"+uri); } out.println("</body>"); out.println("</html>"); }}
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"><!-- servlet定义 --> <servlet> <servlet-name>ErrorHandle</servlet-name> <servlet-class>MyServlet.ErrorHandle</servlet-class> </servlet><!-- servlet映射 --> <servlet-mapping> <servlet-name>ErrorHandle</servlet-name> <url-pattern>/ErrorHandle</url-pattern> </servlet-mapping><!-- error-code 状态代码相关的错误页面 --> <error-page> <error-code>404</error-code> <location>/ErrorHandle</location> </error-page><!-- exception type 异常类型相关的错误页面--> <!-- 对所有的异常类型进行错误处理 --> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/ErrorHandle</location> </error-page></web-app>
- servlet_13 Servlet异常处理
- servlet_13 Cookie处理
- servlet_13
- 处理servlet异常
- Servlet异常处理
- Servlet之异常处理
- Servlet异常处理
- Servlet异常处理
- Servlet异常处理
- servlet异常处理
- Servlet异常处理
- servlet异常处理
- Servlet异常处理
- Servlet 异常处理
- Servlet异常处理
- servlet异常如何处理
- servlet异常如何处理
- servlet异常处理代码
- linux下ppp安装及“field 'pppol2tp' has incomplete type“解决
- c编译时的错误:程序中有游离的‘\240’‘\302’‘\XXX 时解决方案
- //这个文档用来记录我的编程常见的失误:
- Part2、入门(一)
- 深入理解DOM节点关系
- servlet_13 Servlet异常处理
- hive的查询注意事项以及优化总结
- 字符串读写函数fgets和fputs
- 在table(0,0)中是实现电子表功能(接上一个Demo)
- HDU 4417 Super Mario [树状数组+离线操作]【数据结构】
- 现代优化算法
- LeetCode189—Rotate Array
- php 继承的一个奇怪之处
- 2016年总结