码迷,mamicode.com
首页 > 其他好文 > 详细

Servlet异常处理

时间:2016-07-19 13:54:07      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:

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>
技术分享

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

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

如果开启tomcat 在浏览器输入http://item.taobao.com/item.htm?id=41222768202

然后会出现下面

技术分享

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     }
技术分享

然后在配置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>
技术分享

现在我们再次开启tomcat 在浏览器输入http://item.taobao.com/item.htm?id=41222768202

可以看到如下图

技术分享

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 }
技术分享

在这里我们并没有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     }
技术分享

然后再次配置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>
技术分享

然后启动tomcat输入http://item.taobao.com/item.htm?id=41222768202看到

技术分享

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     }
技术分享

从中我们可以看出采用了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://item.taobao.com/item.htm?id=41222768202

技术分享

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


Servlet异常处理

标签:

原文地址:http://blog.csdn.net/baoyutaifeng/article/details/51954254

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!