javaweb回顾第四篇Servlet异常处理

前言:很多网站为了给用户很好的用户体验性,都会提供比较友好的异常界面,现在我们在来回顾一下Servlet中如何进行异常处理的。

1:声明式异常处理

什么是声明式:就是在web.xml中声明对各种异常的处理方法。

是通过<error-page>元素来声明的,<error-page>下面有几个子元素如下图

error-code:http错误代码

exception-type:java异常类的完整名

location:响应http错误代码或者java异常的资源路径

下面通过例子一一讲解:

1:首先我们做个最简单的先在程序中加一个FileNotFound.html文件,文件内容如下

 1 <html>
 2 <head>
 3 <meta charset="UTF-8">
 4 <title>页面没有发现</title>
 5 </head>
 6 <body>
 7 你访问的页面并不存在,或者被移到其他位置。<p>
 8 如有其他问题请联系<a href="#">管理员</a>
 9 </body>
10 </html>
View Code

然后我们在web.xml中加入下面代码

<error-page><error-code>404</error-code><location>/FileNotFound.html</location>
</error-page>

如果开启tomcat 在浏览器输入http://localhost:8080/servlet-test/index1.jsp

然后会出现下面

2:然后我们发现如果我声明越来越多的异常时候会出现越来越多的html这样的静态代码,那么可以能否在后台操作呢,答案是肯定的,现在我们用一个Servlet类来进行响应

首先来看一副关于servlet相关属性的图

现在我以其中status_code作为例子先建立一个ErrorHandlerServlet如下

 1 public class ErrorHandlerServlet extends HttpServlet{
 2 
 3     private static final long serialVersionUID = 1L;
 4     protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException
 5     {
 6 
 7         response.setContentType("text/html;charset=gb2312");
 8         PrintWriter out=response.getWriter();
 9         Integer status_code=(Integer)request.getAttribute("javax.servlet.error.status_code");        
10         out.println("<html><head><title>错误列表</title></head>");
11         out.println("<body>");
12 
13         switch(status_code)
14         {
15         case 401:
16             out.println("<h2>http错误码:"+status_code+"</h2>");
17             out.println("你并没有被授权");
18             out.println("如有其他问题请联系<a href='#'>管理员</a>");
19             break;
20         case 404:
21             out.println("<h2>http错误码:"+status_code+"</h2>");
22             out.println("你访问的页面并不存在,或者被移到其他位置");
23             out.println("如有其他问题请联系<a href='#'>管理员</a>");
24             break;
25         }
26         
27         out.println("</body></html>");
28         out.close();
29     }
ErrorHandlerServlet

然后在配置web.xml

 1 <servlet>
 2         <servlet-name>ErrorHandlerServlet</servlet-name>
 3         <servlet-class>com.lp.servlet.ErrorHandlerServlet</servlet-class>
 4     </servlet>
 5     <servlet-mapping>
 6         <servlet-name>ErrorHandlerServlet</servlet-name>
 7         <url-pattern>/errorHandler</url-pattern>
 8     </servlet-mapping>
 9     <error-page>
10         <error-code>404</error-code>
11         <location>/errorHandler</location>
12     </error-page>
web.xml

现在我们再次开启tomcat 在浏览器输入http://localhost:8080/servlet-test/index1.jsp

可以看到如下图

3:我们发现发现关于exception-type都没有用上那么关于怎么用exception-type呢下面来用实例讲解

我们在写一个关于文件操作的Servlet类FileExceptionServlet

 1 public class FileExceptionServlet extends HttpServlet{
 2     /**
 3      * 
 4      */
 5     private static final long serialVersionUID = 1L;
 6     public  void doGet(HttpServletRequest request,HttpServletResponse response) throws FileNotFoundException  
 7     {        
 8             File file=new File("1.txt");
 9             FileInputStream fileInputStream=new F
10     }
11 }
FileExceptionServlet

在这里我们并没有1.txt文件,注意声明的FileNotFoundException异常在配置中会用的到

同样我们在写一个关于处理Servlet异常的ExceptionHandlerServlet类

 1 public class ExceptionHandlerServlet extends HttpServlet{
 2 
 3     /**
 4      * 
 5      */
 6     private static final long serialVersionUID = 1L;
 7     protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException
 8     {
 9         response.setContentType("text/html;charset=gb2312");
10         PrintWriter out=response.getWriter();
11         out.println("<html><head><title>错误列表</title></head>");
12         out.println("<body>");
13         out.println("应用程序出错");
14         out.println("错误原因可能是某个服务器端文件被删除");
15         out.println("请联系<a href='#'>管理员</a>");    
16         out.println("</body></html>");
17         out.close();
18     }
ExceptionHandlerServlet

然后再次配置web.xml

 1 <servlet>
 2         <servlet-name>ExceptionHandlerServlet</servlet-name>
 3         <servlet-class>com.lp.servlet.ExceptionHandlerServlet</servlet-class>
 4     </servlet>
 5     <servlet-mapping>
 6         <servlet-name>ExceptionHandlerServlet</servlet-name>
 7         <url-pattern>/exceptionHandler</url-pattern>
 8     </servlet-mapping>
 9     <error-page>
10         <exception-type>java.io.FileNotFoundException</exception-type>
11         <location>/exceptionHandler</location>
12     </error-page>
web.xml

然后启动tomcat输入http://localhost:8080/servlet-test/exceptionHandler看到

2:编程式的异常处理

这个在实际开发中运用的比较多主要采取try catch捕获异常 然后进行处理。举一个小例子比喻我们上面说的文件操作,如果发现文件不存在的时候我们可以把这个错误记录在日志便于查阅,ok我看一下

 1 public  void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException  
 2     {    
 3         try {
 4             File file=new File("1.txt");
 5             @SuppressWarnings("unused")
 6             FileInputStream fileInputStream=new FileInputStream(file);
 7         } catch (FileNotFoundException e) {
 8             getServletContext().log(e.getMessage());
 9             response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"文件未能发现");
10         }
11     }
View Code

从中我们可以看出采用了sendError这个方法,目的就是可以把一些错误信息很好的展现出来,日志这里就是简单提下,在实际中可能根据不同业务选择的不一样。

然后再次配置wen.xml

<servlet><servlet-name>FileExceptionServlet</servlet-name><servlet-class>com.lp.servlet.FileExceptionServlet</servlet-class></servlet><servlet-mapping><servlet-name>FileExceptionServlet</servlet-name><url-pattern>/fileexception</url-pattern></servlet-mapping>

再次运行http://localhost:8080/servlet-test/fileexception

好了,关于Servlet异常就说这么多了,随着技术不停的更新,处理异常的方式也越来越多但是这些基础的还是应该了解和学习下的

 

转载于:https://www.cnblogs.com/LipeiNet/p/5684003.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java开发cs教程,日常运维(一)

w命令&#xff1a;用于查看系统负载、显示已经登陆系统的用户列表&#xff0c;并显示用户正在执行的指令等信息第一行从左面开始显示的信息依次为&#xff1a;时间&#xff0c;系统运行时间&#xff0c;登录用户数&#xff0c;平均负载。第二行开始以及下面所有的行&#xff0c…

coursera 《现代操作系统》 -- 第五周 同步机制(1)

临界区块&#xff08;Critical section&#xff09;指的是一个访问共用资源&#xff08;例如&#xff1a;共用设备或是共用存储器&#xff09;的程序片段&#xff0c;而这些共用资源有无法同时被多个线程访问的特性。&#xff08;不是字面意思的一个区域&#xff0c;是程序片段…

java.lang.NoClassDefFoundError:如何解决–第2部分

本文是我们的NoClassDefFoundError故障排除系列的第2部分。 看一下第1部分 。 它将重点介绍最简单的NoClassDefFoundError问题类型。 本文对于Java初学者来说是理想的选择&#xff0c;我强烈建议您自己编译并运行示例Java程序。 今后将使用以下书写格式&#xff0c;并为您提供&…

Android开发技术周报 Issue#34

教程 Google Develop for Android 系列 前几天在G上看到Google Developers站点&#xff0c;有一个Android系列的文章&#xff0c;分享到个人微博&#xff0c;周末闲来没事就学写了下&#xff0c;把它们简单的翻译了下&#xff0c;没想到一发不可收拾&#xff0c;六篇文章全部都…

php进度条插件,分享8款优秀的 jQuery 加载动画和进度条插件_jquery

加载动画和进度条在网站和 Web 应用中的使用非常流行。虽然网速越来越快&#xff0c;但是我们的网站越来越复杂&#xff0c;同时用户对网站的使用体验的要求也越来越高。在内容加载缓慢的时候&#xff0c;使用时尚的加载动画和进度条告诉用户还有内容正在加载是一种非常好的方式…

卷积神经网络(CNN)与特殊的卷积

各种卷积操作的可视化的显示形式&#xff1a;GitHub - vdumoulin/conv_arithmetic: A technical report on convolution arithmetic in the context of deep learning1. fractionally-strided 卷积 如上图示&#xff0c;输入为 33 &#xff0c;想要卷积上采样成 55 的输出。需要…

JBoss AS 7:自定义登录模块

JBoss AS 7很整洁&#xff0c;但是仍然缺少文档&#xff08;错误消息没有那么有用&#xff09;。 这篇文章总结了如何创建自己的兼容JavaEE的登录模块&#xff0c;以对部署在JBoss AS上的Web应用程序的用户进行身份验证。 提供了一个工作的基本用户名密码模块。 为什么要使用Ja…

MySQL安装步骤及相关问题解决

1. 下载MySQL Server&#xff0c;网址&#xff1a;http://dev.mysql.com/downloads/mysql/ 2. 点击MySQL5.5.21的安装文件&#xff0c;出现安装向导界面&#xff0c;单击“next”继续安装&#xff1a; 3. 选择接受协议&#xff0c;单击“next”继续安装&#xff1a; 4. 在出现选…

matlab的数学函数,matlab中常见数学函数的使用

matlab中常见数学函数的使用 MATLAB 基本知识 Matlab 的内部常数 pi 圆周率 exp(1) 自然对数的底数 e i 或 j 虚数单位 Inf 或 inf 无穷大 Matlab 的常用内部数学函数 指数函数 exp(x) 以 e 为底数 log(x) 自然对数&#xff0c;即以 e 为底数的对数 log10(x) 常用对数&#xff…

C++中 list与vector的区别

C中 list与vector的区别 引用http://www.cnblogs.com/shijingjing07/p/5587719.html C vector和list的区别 1.vector数据结构vector和数组类似&#xff0c;拥有一段连续的内存空间&#xff0c;并且起始地址不变。因此能高效的进行随机存取&#xff0c;时间复杂度为o(1);但因为内…

使用Struts 2的查询网格(无插件)

当将jQuery与struts 2一起使用时&#xff0c;开发人员被说服使用struts2-jQuery插件 。 因为大多数论坛和其他Internet资源都支持struts2 jQuery插件。我有这种经验。 我想将Struts 2使用jQuery Grid插件&#xff0c;但不使用struts2 jQuery插件。 对于我而言&#xff0c;很难找…

php reflectionmethod,PHP ReflectionMethod getClosure()用法及代码示例

ReflectionMethod::getClosure()函数是PHP中的一个内置函数&#xff0c;用于为该方法返回动态创建的闭包&#xff0c;否则&#xff0c;在出现错误的情况下返回NULL。用法:Closure ReflectionMethod::getClosure ( $object )参数&#xff1a;该函数接受参数对象&#xff0c;该参…

java学习笔记--IO流

第十二章大纲&#xff1a; I/O input/output 输入/输出 一、创建文件&#xff0c;借助File类来实现 file.createNewFile() &#xff1a; 创建文件 file.exists() &#xff1a; 判断文件是否存在&#xff0c;如果存在&#xff0c;则返回true delete() &#xff1a; 删除文件&…

linux命令之kill篇

作业四&#xff1a;查询firewall进程&#xff0c;然后杀死 [rootlocalhost 桌面]# ps -aux |grep firewall root 772 0.0 2.0 327912 20704 ? Ssl 15:23 0:00 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid root 5323 0.0 0.0 112660…

ActiveMQ网络连接器

这篇文章对我和任何对网络连接器如何为ActiveMQ工作感兴趣的ActiveMQ贡献者而言都是更多的内容。 我最近花了一些时间查看代码&#xff0c;并认为最好画一些快速的图表来帮助我记住我学到的东西&#xff0c;并在将来发现问题时帮助将来确定在哪里进行调试。 如果我输入有误&…

《程序设计与数据结构》第3周学习总结

学号 20162317 《程序设计与数据结构》第3周学习总结 教材学习内容总结 第三章的内容相比之前两章更为具体&#xff0c;介绍的内容更为集中&#xff0c;主要说到了类和对象的问题&#xff0c;其中也仔细介绍了String类、Random类、Math类、NumberFormat类等类。此外也说到了与类…

Java中带有JWebSocket的WebServerSocket

首先&#xff0c;转到http://jwebsocket.org/下载2个软件包Server and Client。 如果要查看源代码&#xff0c;请下载源代码包。 服务器 解压缩服务器程序包。 转到“ conf”文件夹 选择“ jWebSocket.xml”文件打开 编辑“ jWebSocket.xml”文件&#xff0c;在标签<dom…

OpenCV入门指南----人脸检测

本篇介绍图像处理与模式识别中最热门的一个领域——人脸检测&#xff08;人脸识别&#xff09;。人脸检测可以说是学术界的宠儿&#xff0c;在不少EI&#xff0c;SCI高级别论文都能看到它的身影。甚至很多高校学生的毕业设计都会涉及到人脸检测。当然人脸检测的巨大实用价值也让…

matlab提取艾里斑,艾里斑:我不是雀斑

正是艾里斑&#xff0c;限制了光学仪器的精度我们知道凸透镜能把入射光会聚到它的焦点上&#xff0c;由于透镜的口径有一定大小&#xff0c;限制了光线的传播&#xff0c;所以凸透镜也会发生衍射。这导致透镜无法把光线会聚成无限小的点&#xff0c;而只会在焦点上形成具有一定…

mysql启动错误排查-无法申请足够内存

一般情况下mysql的启动错误还是很容易排查的&#xff0c;但是今天我们就来说一下不一般的情况。拿到一台服务器&#xff0c;安装完mysql后进行启动&#xff0c;启动错误如下&#xff1a; 有同学会说&#xff0c;哥们儿你是不是buffer pool设置太大了&#xff0c;设置了96G内存。…