Servlet过滤器——异常捕获过滤器

1.概述

介绍如何实现异常捕获过滤器。

2.技术要点

本实例主要是在过滤器Filter的doFilter()方法中,对执行过滤器链的chain的doFilter()语句处添加try…catch异常捕获语句,然后在chach语句中,循环异常对象,直到找出根异常为止。

3.具体实现

(1)创建Filter实现类ExceptionFilter.java,利用throwable抛出异常,去捕捉异常原因并转到相应的页面中主要代码为:

public class ExceptionFilter implements Filter {
      public void destroy() {
      }
      public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
            try {
                  chain.doFilter(request, response);
            } catch (Exception e) {   //如果有异常则捕捉
                  Throwable rootCause = e;
                  while (rootCause.getCause() != null) {
                        rootCause = rootCause.getCause();
                  }
                  String errormessage = rootCause.getMessage();  //异常根本
                  errormessage = errormessage == null ? "异常:" + rootCause.getClass().getName()
                              : errormessage;                                       //中止传递异常的原因
                  request.setAttribute("errormessage", errormessage);
                  request.setAttribute("e", e);
                  if (rootCause instanceof LoginException) {                                //1转到登录页面
                        request.getRequestDispatcher("/LoginException.jsp").forward(
                                    request, response);
                  } else if (rootCause instanceof OperationException) {
                                                                                    //2转到操作页面
                        request.getRequestDispatcher("/OperationException.jsp").forward(                                    request, response);
                  } else {
                        request.getRequestDispatcher("/exception.jsp").forward(request,   //其它异常
                                    response);
                  }
            }
      }
      public void init(FilterConfig arg0) throws ServletException {
      }
}

(2)创建LoginException.jsp登录异常页面主要代码为:

<div align="center" style="font-size: large;">后台操作</div>
<form action="">
      <table align="center">
            <tr>
                  <td>帐号</td>
                  <td><input type="text" name="account" /></td>
            </tr>
            <tr>
                  <td>密码</td>
                  <td><input type="password" name="password" /></td>
            </tr>
            <tr>
                  <td align="center" colspan="2"><input type="submit" value=" 登录 " />
                  <input type="submit" value="退出"/></td>
            </tr>
      </table>
</form>
<div class="error" align="center">
${ errormessage }
</div>

(3)创建OperationException操作异常页面主要代码如下:

<div class="error" align="center">
${ errormessage } <a href="javascript:history.go(-1); ">返回上一级操作</a>
</div>

(4)创建Exceptionmain.jsp页面,关键代码如下:

<%
      String action = request.getParameter("action");
      if("OperationException".equals(action)){
            throw new OperationException("此操作失败.  ");
      }
      else if("LoginException".equals(action)){
            throw new LoginException("请您登陆后再进行此项操作.  ");
      }
      else if("exception".equals(action)){
            Integer.parseInt("mull空传递参数");
      }
%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>异常捕捉过滤器</title>
</head>
<body>
<table align="left" cellpadding="2" cellspacing="2">
<Tr><td><a href="${ pageContext.request.requestURI }?action=OperationException">过滤操作</a></td></Tr>
<tr><td><a href="${ pageContext.request.requestURI }?action=LoginException">过滤登录</a></td></tr>
<Tr><td><a href="${ pageContext.request.requestURI }?action=exception">过滤异常</a></td></Tr>
</table>
时间: 2024-10-08 03:33:27

Servlet过滤器——异常捕获过滤器的相关文章

全局的异常捕获过滤器 区分ajax请求 与浏览器导航请求

建一个类ExceptionAttribute 继承 HandleErrorAttribute 重写OnException 方法 里面代码: //1.0日志记录(文本日志和数据库日志) //拿到日志 Exception exe= filterContext.Exception; //获取当前exe的最详细信息 Exception inexe = exe.InnerException==null ? exe:exe.InnerException; while (inexe.InnerExceptio

Wireshark系列之4 捕获过滤器

在Wireshark中往往会抓到很多数据,这时我们就需要用到过滤器Filter来筛选出我们所关心的数据包. Wireshark提供了两种过滤器: 捕获过滤器:在抓包之前就设定好过滤条件,然后只抓取符合条件的数据包. 显示过滤器:在已捕获的数据包集合中设置过滤条件,隐藏不想显示的数据包,只显示符合条件的数据包. 需要注意的是,这两种过滤器所使用的语法是完全不同的,在本篇博文中将介绍捕获过滤器. 使用捕获过滤器的主要原因就是性能.如果你知道并不需要分析某个类型的流量,那么可以简单地使用捕获过滤器过滤

WebAPI 过滤器拦截处理以及异常捕获

对action进行拦截处理 public class UserAuthorizeAttribute : ActionFilterAttribute { /// <summary> /// CC调用的Token /// </summary> //private static readonly string CCToken = ConfigurationManager.AppSettings["CCToken"].ToString(); /// <summar

Servlet组件之一——Filter过滤器

1 学习目标 1. 能够说出过滤器的生命周期 2. 能够写出过滤器的映射路径 3. 能够说出过滤器的四种过滤类型 4. 能够利用FilterConfig获取过滤器的配置参数 5. 能够说出什么是过滤器链 6. 能够说出过滤器链的执行顺序2 过滤器的入门 Java Web的三大组件( 1)都需要交给web服务器运行  2)在web.xml文件中配置  ) 1. Servlet:  javax.servlet.Servlet 通过HTTP协议接收客户端的请求,并且做出响应的一个Java应用程序. 2

我的Java之旅 第八课 Servlet 进阶API、过滤器与监听器

1.Servlet.ServletConfig与GenericServlet 首次请求的顺序 => 生成HttpServletRequest与HttpServletResponse =>调用service()方法,以前边两个对象作为参数 =>Web容器启动, =>读取Servlet设置信息,实例化Servlet类 =>为每个Servlet设置信息产生一个ServletConfig对象. =>调用Servlet接口的init()方法,以产生的ServletConfig对象

servlet/filter/listener/interceptor过滤器、监听器、拦截器区分

因为之前一直分不清过滤器和拦截器的区别,所以有了两者差不多的错觉,因此在这里总结下servlet/filter/listener/interceptor过滤器.监听器.拦截器. 在此之前先简单回顾下servlet: 概述:servlet是一种运行服务器端的java应用程序,它工作在客户端请求与服务器响应的中间层. 主要作用:在于交互式地浏览和修改数据,生成动态 Web 内容. 访问流程: 1,客户端发送请求至服务器端: 2,服务器将请求信息发送至 Servlet: 3,Servlet 生成响应内

asp.net web api 异常捕获

1 向客户端发送错误消息 使用throw new HttpResponseException()向客户端抛出错误信息. HttpResponseException包含两个重载的构造函数,其中一个是构造函数参数类型为HttpResponseMessage,通过其设置状态码,错误消息短语以及消息体内容来向客户端抛出比较详细的错误信息.另一个参数类型为HttpStatusCode,只能设定状态码. 2自定义异常过滤器 扩展IExceptionFilter来定义异常过滤器.异常过滤器不会捕获类型为Htt

学习笔记_过滤器概述(过滤器JavaWeb三大组件之一)

过滤器Filter Filter和Lister是Servlet规范里的两个高级特性.不同于Servlet,它们不用于处理客户端请求,只用于对request.response进行修改或者对context.session.request事件进行监听. Filter意为滤镜或者过滤器,用于Servlet之外对request或者response进行修改.Filter提出了滤镜链的概念,一个Filterchain包括多个F 1 什么是过滤器 过滤器JavaWeb三大组件之一,它与Servlet很相似!不它

Spring-MVC开发之全局异常捕获全面解读(转)

异常,异常.我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个!产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息!在用Spring MVC开发WEB应用时捕获全局异常的方法基本有两种: WEB.XML,就是指定error-code和page到指定地址,这也是最传统和常见的做法 用Spring的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等. SO,本文列出Spring-MVC做WEB开发时常用全局异常捕获的几种解决方案抛砖引玉,互相没