javaweb回顾第四篇Servlet异常处理
前言:很多网站为了给用户很好的用户体验性,都会提供比较友好的异常界面,现在我们在来回顾一下Servlet中如何进行异常处理的。
1:声明式异常处理
什么是声明式:就是在web.xml中声明对各种异常的处理方法。
是通过<error-page>元素来声明的,<error-page>下面有几个子元素如下图
error-code:http错误代码
exception-type:java异常类的完整名
location:响应http错误代码或者java异常的资源路径
下面通过例子一一讲解:
1:首先我们做个最简单的先在程序中加一个FileNotFound.html文件,文件内容如下
<html>
<head>
<meta charset="UTF-8">
<title>页面没有发现</title>
</head>
<body>
你访问的页面并不存在,或者被移到其他位置。<p>
如有其他问题请联系<a href="#">管理员</a>
</body>
</html>
然后我们在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如下
public class ErrorHandlerServlet extends HttpServlet{ private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException
{ response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
Integer status_code=(Integer)request.getAttribute("javax.servlet.error.status_code");
out.println("<html><head><title>错误列表</title></head>");
out.println("<body>"); switch(status_code)
{
case 401:
out.println("<h2>http错误码:"+status_code+"</h2>");
out.println("你并没有被授权");
out.println("如有其他问题请联系<a href='#'>管理员</a>");
break;
case 404:
out.println("<h2>http错误码:"+status_code+"</h2>");
out.println("你访问的页面并不存在,或者被移到其他位置");
out.println("如有其他问题请联系<a href='#'>管理员</a>");
break;
} out.println("</body></html>");
out.close();
}
ErrorHandlerServlet
然后在配置web.xml
<servlet>
<servlet-name>ErrorHandlerServlet</servlet-name>
<servlet-class>com.lp.servlet.ErrorHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ErrorHandlerServlet</servlet-name>
<url-pattern>/errorHandler</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/errorHandler</location>
</error-page>
web.xml
现在我们再次开启tomcat 在浏览器输入http://localhost:8080/servlet-test/index1.jsp
可以看到如下图
3:我们发现发现关于exception-type都没有用上那么关于怎么用exception-type呢下面来用实例讲解
我们在写一个关于文件操作的Servlet类FileExceptionServlet
public class FileExceptionServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request,HttpServletResponse response) throws FileNotFoundException
{
File file=new File("1.txt");
FileInputStream fileInputStream=new F
}
}
FileExceptionServlet
在这里我们并没有1.txt文件,注意声明的FileNotFoundException异常在配置中会用的到
同样我们在写一个关于处理Servlet异常的ExceptionHandlerServlet类
public class ExceptionHandlerServlet extends HttpServlet{ /**
*
*/
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request,HttpServletResponse response) throws IOException
{
response.setContentType("text/html;charset=gb2312");
PrintWriter out=response.getWriter();
out.println("<html><head><title>错误列表</title></head>");
out.println("<body>");
out.println("应用程序出错");
out.println("错误原因可能是某个服务器端文件被删除");
out.println("请联系<a href='#'>管理员</a>");
out.println("</body></html>");
out.close();
}
ExceptionHandlerServlet
然后再次配置web.xml
<servlet>
<servlet-name>ExceptionHandlerServlet</servlet-name>
<servlet-class>com.lp.servlet.ExceptionHandlerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ExceptionHandlerServlet</servlet-name>
<url-pattern>/exceptionHandler</url-pattern>
</servlet-mapping>
<error-page>
<exception-type>java.io.FileNotFoundException</exception-type>
<location>/exceptionHandler</location>
</error-page>
web.xml
然后启动tomcat输入http://localhost:8080/servlet-test/exceptionHandler看到
2:编程式的异常处理
这个在实际开发中运用的比较多主要采取try catch捕获异常 然后进行处理。举一个小例子比喻我们上面说的文件操作,如果发现文件不存在的时候我们可以把这个错误记录在日志便于查阅,ok我看一下
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException
{
try {
File file=new File("1.txt");
@SuppressWarnings("unused")
FileInputStream fileInputStream=new FileInputStream(file);
} catch (FileNotFoundException e) {
getServletContext().log(e.getMessage());
response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,"文件未能发现");
}
}
从中我们可以看出采用了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异常就说这么多了,随着技术不停的更新,处理异常的方式也越来越多但是这些基础的还是应该了解和学习下的
javaweb回顾第四篇Servlet异常处理的更多相关文章
- javaweb回顾第六篇谈一谈Servlet线程安全问题
前言:前面说了很多关于Servlet的一些基础知识,这一篇主要说一下关于Servlet的线程安全问题. 1:多线程的Servlet模型 要想弄清Servlet线程安全我们必须先要明白Servlet实例 ...
- JavaWeb学习总结第四篇--Servlet开发
Servlet开发 用户在浏览器中输入一个网址并回车,浏览器会向服务器发送一个HTTP请求.服务器端程序接受这个请求,并对请求进行处理,然后发送一个回应.浏览器收到回应,再把回应的内容显示出来.这种请 ...
- javaweb回顾第七篇jsp
1:为什么会有JSP jsp全名(java server pages)中文叫做java服务器页面.在Servlet那一篇我们发现用Servlet可以生成动态页面,但是我们却在Servlet中却写了大量 ...
- javaWeb核心技术第四篇之Javascript第二篇事件和正则表达式
- 事件 - 表单提交(掌握) "onsubmit" - 单击事件(掌握) "onclick" - 页面加载成功事件(掌握) "onload" ...
- javaweb回顾第十篇JSTL
前言:JSTL(JSP Standard Tag Library)JSP标准标签库.它的目的是为了简化JSP的开发,如何没有JSTL可能我们开发的时候就需要写大量的自定义标签,无疑会加大开发难度,有了 ...
- javaweb回顾第五篇浅谈会话
1:什么是会话 通俗来说就是客户和服务器的一次私密谈话,客户发送请求以后服务器能够识别请求是来自同一个客户,他们是1对1的关系. 了解会话以后我们就要去考虑如何去实现这些问题下面一一进行解析 2:会话 ...
- javaweb回顾第十一篇过滤器(附实现中文乱码问题)
1:过滤器概念 过滤器就是一种在请求目标资源的中间组件,比喻把污水转换成纯净水中间需要一个污水净化设备,那么这个设备就好比一个过滤器.那么我用图来表示过滤器(可以有多个过滤器)运行的过程 2:Filt ...
- javaweb回顾第八篇如何创建自定义标签
前言:在javaweb开发中自定义标签的用处还是挺多的.今天和大家一起看自定义标签是如何实现的. 1:什么是标签 标签是一种XML元素,通过标签可以使JSP页面变得简介易用,而且标签具有很好的复用性. ...
- javaweb回顾第三篇数据库访问
前言:本篇主要针对数据库的操作,在这里不适用hibernate或者mybatis,用最原始的JDBC进行讲解,通过了解这些原理以后更容易理解和学习hibernate或mybatis. 1:jdbc的简 ...
随机推荐
- LightOJ 1094 - Farthest Nodes in a Tree(树的直径)
http://acm.hust.edu.cn/vjudge/contest/121398#problem/H 不是特别理解,今天第一次碰到这种问题.给个链接看大神的解释吧 http://www.cnb ...
- 防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
贴子转自http://hi.baidu.com/bobylou,转之前并没有验证文章里的方法是不是有效,估计原作者把它放到blog之前应该做过测试了吧. Struts本身有一套完善的防止重复提交表单的 ...
- linux 下两台电脑之间ssh无密码连接
例子:在192.168.0.12使用tecmint用户,连接192.168.0.11主机上的sheena用户 Step 1: Create Authentication SSH-Kegen Keys ...
- 编程之美2014挑战赛 复赛 Codehunt平台试题答案
var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...
- 利用NVelocity 模版生成文本文件
namespace Common { public class Tools { public string Process(string content, int startIndex, int le ...
- Programming Assignment 5: Kd-Trees
用2d-tree数据结构实现在2维矩形区域内的高效的range search 和 nearest neighbor search.2d-tree有许多的应用,在天体分类.计算机动画.神经网络加速.数据 ...
- [ACM] poj 1064 Cable master (二分查找)
Cable master Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21071 Accepted: 4542 Des ...
- postgresql 配置文件优化
postgresql 配置文件优化 配置文件 默认的配置配置文件是保存在/etc/postgresql/VERSION/main目录下的postgresql.conf文件 如果想查看参数修改是否生效, ...
- 学习WCF之——wcf程序的创建
这是我参考的主要资料——wcf学习之旅:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 首先,如博客上介绍的一样,创建空白的项 ...
- Exception in thread "http-apr-8080-exec-2"
设置了catalina.bat.catalina.sh都不起作用MyEclipse中选择菜单Windows---preferences---MyEclipse---Servers---Tomcat-- ...