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、请求属性-错误/异常
| 序号 | 属性 & 描述 |
|---|---|
| 1 | javax.servlet.error.status_code 该属性给出状态码,状态码可被存储,并在存储为 java.lang.Integer 数据类型后可被分析。 |
| 2 | javax.servlet.error.exception_type 该属性给出异常类型的信息,异常类型可被存储,并在存储为 java.lang.Class 数据类型后可被分析。 |
| 3 | javax.servlet.error.message 该属性给出确切错误消息的信息,信息可被存储,并在存储为 java.lang.String 数据类型后可被分析。 |
| 4 | javax.servlet.error.request_uri 该属性给出有关 URL 调用 Servlet 的信息,信息可被存储,并在存储为 java.lang.String 数据类型后可被分析。 |
| 5 | javax.servlet.error.exception 该属性给出异常产生的信息,信息可被存储,并在存储为 java.lang.Throwable 数据类型后可被分析。 |
| 6 | javax.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>
相关文章:
Servlet笔记(8):异常处理
1、错误页面配置 web.xml <!-- servlet 定义 --> <servlet><servlet-name>ErrorHandler</servlet-name><servlet-class>ErrorHandler</servlet-class> </servlet> <!-- servlet 映射 --> <servlet-mapping><servle…...
stm32f407探索者开发板(二十一)——窗口看门狗
文章目录一、窗口看门狗概述1.1 看门狗框图1.2 窗口看门狗工作过程总结1.3 超时时间1.4 为什么需要窗口看门狗1.5 其他注意事项二、常用寄存器和库函数2.1 控制寄存器WWDG_ CR2.2 配置寄存器WWDG_ CFR2.3 状态寄存器WWDG_SR三、手写窗口看门狗3.1 配置过程3.2 初始化窗口看门狗…...
C++ 模板
1. 泛型编程实现一个通用的交换函数,使用函数重载虽然可以实现,但是有以 下几个不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数2. 代码的可维…...
C++中的友元及运算符重载
友元 意义 程序中,有些私有属性也想让类外特殊的一些函数或者类进行访问,就要用到友元技术 关键字 friend 友元的三种实现 全局函数做友元 class Room{friend void test(Person &p);//friend class test;public:string phone_number;private:string…...
五、运行时数据区内部结构、JVM中的线程
内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程种内存申请、分配‘、管理的策略,保证了JVM的高效稳定运行,不同的JVM对于内存的划分方式和管理机制…...
Codeforces Round #848 (Div. 2)A-C
传送门 目录 A. Flip Flop Sum 代码: B. The Forbidden Permutation 代码: C. Flexible String 代码: A. Flip Flop Sum 题意:给你一个长度为n的数组(数组元素只为1或者-1),你要且只能进行…...
机器学习笔记之近似推断(一)从深度学习角度认识推断
机器学习笔记之近似推断——从深度学习角度认识推断引言推断——基本介绍精确推断难的原因虽然能够表示,但计算代价太大无法直接表示引言 本节是一篇关于推断总结的博客,侧重点在于深度学习模型中的推断任务。 推断——基本介绍 推断(Inference\text{…...
指针的进阶
一、字符指针 int main() {char ch w;char* pc &ch;//pc就是字符指针//const char *p "abcdef";//这里其实是把字符串"abcdef"的首地址放入了指针p中//*p w;//这是错误的无法修改值(可以看到这里绿色波浪线警告)char arr[] …...
一元二次方程方程的类
1 问题设计一个一元二次方程的类,其中包括能够反映一元二次方程的属性与操作行为,然后再设计一个测试类,检测类的使用情况。2 方法使用package语句将方程的属性即计算跟的方法封装在一个有包名的类中,包名为tom.jiafei,…...
Ask林曦|来回答,30个你关心的日常问题(二)
在林曦老师的线上书法直播课上,上课前后的聊天时间里,时常有同学向林曦老师提问,这些问题涵盖了日常生活的诸多方面,从身体的保养,到快乐的法门,皆是大家感兴趣的,也都共同关切的。 暄桐教室…...
哪款电容笔适合开学季?电容笔和Apple Pencil的区别
其实,市场上一般的电容笔和Apple Pencil的最大差别,就在于Apple Pencil与普通电容笔两者的重量和压感。然而,由于苹果电容笔价格过高,目前电容笔的市场份额逐渐转向平替电容笔,平替电容笔其性能也逐渐得到改善。下面&a…...
Qt之Qprocess
QProcess 可用于完成启动外部程序,并与之交互通信。 一、启动外部程序的两种方式 1)一体式:void QProcess::start(const QString & program,const QStringList &arguments,OpenMode mode ReadWrite) 外部程序启动后&…...
为什么不愿意专升本 学历有什么用
专升本包括两种形式普通专升本和成人专升本。普通专升本毕业是全日制学历,考试仅有一次,错过不能补考所以考生不愿意选择,成人专升本毕业是非全日制学历,学历被国家承认,和普通高校毕业证有相同的使用效力。为何考生不…...
构造函数的使用大全
概述 在C中创建一个对象时,通常需要做一些数据初始化的工作,因此便提供了一个特殊的成员函数 —— 构造函数。一般情况下,并不需要程序员主动调用构造函数,而是在创建对象时,由系统自动调用。构造函数可以由程序员定义…...
ASP.NET Core MVC 项目 IOC容器
目录 一:什么是IOC容器 二:简单理解内置Ioc容器 三:依赖注入内置Ioc容器 四:生命周期 五:多种注册方式 一:什么是IOC容器 IOC容器是Inversion Of Control的缩写,翻译的意思就是控制反转。 …...
ARM工控机/网关- 钡铼技术
一、NXP处理器ARM控制器的介绍 NXP半导体是汽车、穿戴、消费电子等领域中智能机器解决方案的领先供应商。其产品线庞大,包括处理器、微控制器、快速设计平台、ARM控制器等。在物联网控制、汽车电子、安全应用等领域,NXP处理器ARM控制器已成为半导体行业的…...
为什么都在喊数据可视化?它究竟怎么做?
在数字化转型的浪潮中,不论是传统行业,还是新兴行业总会提到“数据可视化”这个词。那数据可视化到底是什么?为什么会受到那么多人追捧?又该怎么才能做到数据可视化呢? 一、数据可视化是什么? 首先“可视…...
nodejs+vue停车场停车位短租系统vscode
目 录前端技术:nodejsvueelementui 前端:HTML5,CSS3、JavaScript、VUE 1、 node_modules文件夹(有npn install产生) 这文件夹就是在创建完项目后,cd到项目目录执行npm install后生成的文件夹,下载了项目需要的依赖项。 2、…...
物理真机上LUKS结合TPM的测试 —— 使用随机数密钥
1. 创建磁盘空间 命令如下: dd if/dev/zero ofenc.disk bs1M count50 实际命令及结果如下: $ dd if/dev/zero ofenc.disk bs1M count50 输入了 500 块记录 输出了 500 块记录 52428800 字节 (52 MB, 50 MiB) 已复制,0.0587495 sÿ…...
Linux USB 开发指南
文章目录Linux USB 开发指南1 前言1.1 文档简介1.2 目标读者1.3 适用范围2 模块介绍2.1 模块功能介绍2.2 相关术语介绍2.3 模块配置介绍2.3.1 Device Tree 配置说明2.3.2 board.dts 配置说明2.3.3 kernel menuconfig 配置说明2.4 源码结构介绍2.5 驱动框架介绍2.6 Gadget 配置2…...
OpenClaw+Qwen3-4B创意助手:自动生成营销文案与设计建议
OpenClawQwen3-4B创意助手:自动生成营销文案与设计建议 1. 为什么需要个人创意助手? 去年夏天,我接手了一个小型咖啡品牌的社交媒体运营工作。每天需要产出5-6条不同风格的文案,还要设计配套的视觉方案。连续两周后,…...
阿里通义实验室FunAudioLLM实战:如何用SenseVoice快速搭建多语言语音识别系统(附代码)
基于SenseVoice构建多语言语音识别系统的工程实践指南 语音识别技术正在重塑人机交互的边界,而阿里通义实验室开源的FunAudioLLM项目中的SenseVoice模型,为开发者提供了一把打开多语言语音世界的钥匙。不同于传统ASR系统需要针对不同语言单独训练模型的繁…...
NoFences:免费开源桌面分区管理工具,告别杂乱桌面,提升工作效率50%
NoFences:免费开源桌面分区管理工具,告别杂乱桌面,提升工作效率50% 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 想要告别杂乱无章的Win…...
如何用MCQTSS_QQMusic解决音乐资源获取难题?3大技术突破实现无损下载
如何用MCQTSS_QQMusic解决音乐资源获取难题?3大技术突破实现无损下载 【免费下载链接】MCQTSS_QQMusic QQ音乐解析 项目地址: https://gitcode.com/gh_mirrors/mc/MCQTSS_QQMusic 在数字音乐时代,QQ音乐作为国内领先的音乐平台,拥有海…...
Hermes邮件生成器详解:如何配置产品信息和自定义主题
Hermes邮件生成器详解:如何配置产品信息和自定义主题 【免费下载链接】hermes Golang package that generates clean, responsive HTML e-mails for sending transactional mail 项目地址: https://gitcode.com/gh_mirrors/he/hermes Hermes是一款强大的Go语…...
像素剧本圣殿效果展示:生成含镜头切换提示与音效标注的专业脚本
像素剧本圣殿效果展示:生成含镜头切换提示与音效标注的专业脚本 1. 专业剧本创作新体验 在影视创作领域,剧本质量直接影响最终作品的表现力。传统剧本创作往往需要编剧反复推敲场景转换、镜头语言和音效设计,这个过程既耗时又需要丰富的专业…...
安防弱电智能化VISIO图例实战指南:从入门到精通的设计技巧
1. VISIO在安防弱电设计中的核心价值 第一次接触安防弱电智能化设计时,我被各种复杂的系统连接关系搞得头晕眼花。直到发现VISIO这个神器,才真正体会到什么叫"一图胜千言"。不同于普通CAD软件,VISIO最大的优势在于它专为系统图设计…...
3个高效网页资源捕获方案:猫抓插件技术解析与实战指南
3个高效网页资源捕获方案:猫抓插件技术解析与实战指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓(Cat-Catch&…...
百度智能云千帆AppBuilder API调用全攻略:从密钥获取到实战代码示例
百度智能云千帆AppBuilder API深度集成指南:从密钥管理到高效调用实践 在人工智能应用开发领域,快速集成可靠的AI能力已成为开发者提升效率的关键。百度智能云千帆AppBuilder作为一站式AI原生应用开发平台,其API接口的灵活调用能力让开发者能…...
解决Swagger2集成中v2/api-docs接口404问题的关键:正确配置Docket分组
1. 为什么访问v2/api-docs会返回404? 这个问题困扰过不少开发者。当你兴冲冲地集成完Swagger2,打开swagger-ui.html页面,却发现页面一片空白,控制台报错显示v2/api-docs接口返回404。更让人抓狂的是,单独访问这个接口时…...
