当前位置: 首页 > news >正文

Servlet笔记(8):异常处理

1、错误页面配置

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-page><error-code>404</error-code><location>/ErrorHandler</location>
</error-page>
<error-page><error-code>403</error-code><location>/ErrorHandler</location>
</error-page><!-- 关于程序异常相关的错误页面 -->
<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>

web.xml节点说明

<error-page>	//错误页面容器声明
<error-code>	//错误代码
<exception-type>	//异常类型声明
<location>	//错误跳转页面

2、请求属性-错误/异常

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

3、Servlet 错误处理程序实例

ErrorHandler.java

// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;// 扩展 HttpServlet 类
public class ErrorHandler extends HttpServlet {// 处理 GET 方法请求的方法public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException{// 分析 Servlet 异常       Throwable throwable = (Throwable)request.getAttribute("javax.servlet.error.exception");Integer statusCode = (Integer)request.getAttribute("javax.servlet.error.status_code");String servletName = (String)request.getAttribute("javax.servlet.error.servlet_name");if (servletName == null){servletName = "Unknown";}String requestUri = (String)request.getAttribute("javax.servlet.error.request_uri");if (requestUri == null){requestUri = "Unknown";}// 设置响应内容类型response.setContentType("text/html");PrintWriter out = response.getWriter();String title = "Error/Exception Information";String docType ="<!doctype html public \"-//w3c//dtd html 4.0 " +       "transitional//en\">\n";out.println(docType +"<html>\n" +"<head><title>" + title + "</title></head>\n" +"<body bgcolor=\"#f0f0f0\">\n");if (throwable == null && statusCode == null){out.println("<h2>Error information is missing</h2>");out.println("Please return to the <a href=\"" +             response.encodeURL("http://localhost:8080/") +             "\">Home Page</a>.");}else if (statusCode != null){out.println("The status code : " + statusCode);}else{out.println("<h2 class="tutheader">Error information</h2>");out.println("Servlet Name : " + servletName + "</br></br>");out.println("Exception Type : " + throwable.getClass( ).getName( ) + "</br></br>");out.println("The request URI: " + requestUri + "<br><br>");out.println("The exception message: " + throwable.getMessage( ));}out.println("</body>");out.println("</html>");}// 处理 POST 方法请求的方法public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}
}

web.xml

<servlet><servlet-name>ErrorHandler</servlet-name><servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- servlet mappings -->
<servlet-mapping><servlet-name>ErrorHandler</servlet-name><url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<error-page><error-code>404</error-code><location>/ErrorHandler</location>
</error-page>
<error-page><exception-type>java.lang.Throwable</exception-type ><location>/ErrorHandler</location>
</error-page>
http://www.lryc.cn/news/18518.html

相关文章:

  • stm32f407探索者开发板(二十一)——窗口看门狗
  • C++ 模板
  • C++中的友元及运算符重载
  • 五、运行时数据区内部结构、JVM中的线程
  • Codeforces Round #848 (Div. 2)A-C
  • 机器学习笔记之近似推断(一)从深度学习角度认识推断
  • 指针的进阶
  • 一元二次方程方程的类
  • Ask林曦|来回答,30个你关心的日常问题(二)
  • 哪款电容笔适合开学季?电容笔和Apple Pencil的区别
  • Qt之Qprocess
  • 为什么不愿意专升本 学历有什么用
  • 构造函数的使用大全
  • ASP.NET Core MVC 项目 IOC容器
  • ARM工控机/网关- 钡铼技术
  • 为什么都在喊数据可视化?它究竟怎么做?
  • nodejs+vue停车场停车位短租系统vscode
  • 物理真机上LUKS结合TPM的测试 —— 使用随机数密钥
  • Linux USB 开发指南
  • FreeRTOS入门(03):队列、信号量、互斥量
  • Biome-BGC在模拟过程中,如何使用Linux、Python等,完成前处理和后处理工作???
  • 【unittest学习】unittest框架主要功能
  • 京东测开岗3+1面经+经验分享,拿到offer,月薪34k....
  • 后端接收格式为x-www-form-urlencoded的数据
  • LeetCode 707. 设计链表
  • HTTP的主要作用是什么
  • SpringBoot系列-- @Enable 模块驱动
  • PHP程序员适合创业吗?
  • 2023年CDGA考试-第12章-元数据(含答案)
  • 数据结构之顺序表篇