`
Notebookdong
  • 浏览: 120760 次
社区版块
存档分类
最新评论

Servlet Filter解析

 
阅读更多

   Servlet Filter(过滤器)是小型的web组件,它能够处理传入的请求和传出的响应。它能够在一个request到达Servlet之前预处理request,也可以在离开Servlet时处理response。它具有高度的透明性,无需更改应用程序代码,就可以根据需要添加、修改或从应用程序中将它删除。

   一个Filter 包括: 

  • 在servlet被调用之前截获; 
  • 在servlet被调用之前检查servlet request; 
  • 根据需要修改request头和request数据; 
  • 根据需要修改response头和response数据; 
  • 在servlet被调用之后截获. 

创建一个Filter我们只要implements Filter接口然后重写Filter接口中的三个方法就可以了,下面创建一个我们自己的Filter名字叫MyFilter:

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilter implements Filter {

	public void destroy() {
		// TODO Auto-generated method stub
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		System.out.println("enter filter....");
		chain.doFilter(request, response);
		System.out.println("out  filter....");
	}

	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

 在创建完MyFilter类之后,需要在web.xml文件加入相应代码进行部署:

  <filter>
    <display-name>MyFilter</display-name>
    <filter-name>MyFilter</filter-name>
    <filter-class>cookie.MyFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

 这样配置完之后,当我们再通过浏览器去访问的时候,所有的请求都会先经过MyFilter,首先执行doFilter方法中的System.out.println("enter filter...."); 然后执行chain.doFilter(request, response);如果还有其它的Filter则会继续调用其它的Filter,如果没有其它的Filter则调用所请求的Servlet,在调用完Servlet之后就执行System.out.println("out  filter....");然后请求结束。

   如果要建立多个Filter写法也和上面的一样创建另一个Filter类,在web.xml中进行部署。在这里如果项目中有多个Filter,它们的执行顺序是怎么区别的呢?通过测试发现,服务器会通过web.xml中Filter部署的顺序来决定每个Filter执行的顺序:

  <filter>
    <display-name>MyFilter2</display-name>
    <filter-name>MyFilter2</filter-name>
    <filter-class>cookie.MyFilter2</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFilter2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <filter>
    <display-name>MyFilter</display-name>
    <filter-name>MyFilter</filter-name>
    <filter-class>cookie.MyFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>MyFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

   上面有两个Filter,MyFilter和MyFilter2但MyFilter2在web.xml中是放在MyFilter的前面的,所以当执行的时候是会先执行MyFilter2。

   通过源码可以看到FilterChain接口的实现类ApplicationFilterChain有个数组filters,这个里面放的就是我们所定义的所有Filter。当启动服务器的时候服务器通过web.xml所定义的<filter>标签中的内容去实例化每个过渡器,并把每个实例添加到filters这个数组中。

final class ApplicationFilterChain  implements FilterChain, CometFilterChain{
 private static final ThreadLocal lastServicedRequest;
 private static final ThreadLocal lastServicedResponse;
 public static final int INCREMENT = 10;
 private ApplicationFilterConfig[] filters = new ApplicationFilterConfig[0];

 

 

 

  • 大小: 17.8 KB
分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    教学在线留言答疑系统,JavaWeb基础,servlet jsp filter,原生jdbc.zip

    项目模块解析:按照实际项目结构,分模块介绍了后台管理、用户权限管理、数据报表生成等功能的具体实现。 代码与实现细节:提供了完整的项目源代码,并针对关键部分进行了详细的注释和解析。 文档与笔记:整理了开发...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    5.1 servlet与servlet容器 182 5.2 servlet容器的分类 183 5.3 servlet和其他技术的比较 183 5.4 tomcat介绍 183 5.5 tomcat的安装与配置 184 5.5.1 安装tomcat 185 5.5.2 运行tomcat 186 5.5.3 tomcat启动...

    Ajax请求和Filter配合案例解析

    现在有这样一个问题,就是在提交大片文字评论的时候,前台拿到数据之后给后台发送ajax请求,然后后台有一个防止SQL注入的Filter,这个Filter得到这个前台传过来的数据之后,进行合法性校验,如果没有校验成功,那么...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    11.6 FilterDef类 95 11.7 ApplicationFilterConfig类 96 11.8 ApplicationFilterChain类 96 11.9 应用程序 97 第12章 StandardContext类 98 12.1 概述 98 12.2 StandardContext的配置 98 12.2.1 StandardContext类...

    webjars-webfilter-resolver:Webfilter可以自动解决webjar的问题,而无需使用类似于Spring Boot的版本

    该Webfilter对Java EE(或其他实现Servlet 3.1 API的Web容器)执行相同的操作。 特征 该Webfilter支持两种响应服务方法(行为)。 响应服务方法 解释 重新定向 对webjars/foo/bar.js将通过返回重定向标头来解决。 ...

    基于Servlet+JSP+JavaBean的新生管理系统源码+数据库+部署说明(javaweb高分课设).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程...-servlet.controller,servle.filter,servle.UI -domain ## 搭建环境 IntelliJ IDEA +MySQL

    java项目源码之UrlRewriter Java v2.0 RC1-urlrewriterjava.rar

    基于 Servlet Filter 或者 Spring Interceptor 等技术,实现对请求的拦截和处理。 在请求到达服务器之前或者返回给客户端之前,通过拦截器对 URL 进行重写操作。 灵活的重写规则: 提供灵活的 URL 重写规则配置,...

    lucy-xss-filter

    同时支持DOM和SAX解析器。XssPreventer 使用apache-common-lang3库防止XSS攻击。 只需按如下所示转换所有输入字符串,即可在网络浏览器中将其识别为HTML标记。 &lt; → &lt; &gt; → &gt; " → &quot; ' → &#39;Xss...

    javaweb详细笔记,绝对详细(内含代码)

    javaweb ...知识点 Javascript知识点 jQuery知识点 14 Bootstrap知识点 17 JDBC & 配置文件 & 连接池 19 Xml文档及解析 31 反射 33 ...JavaWeb核心之Servlet 41 HttpServletResponse 46 ...过滤器Filter

    过滤器和ajax

    使用servlet实现ajax的基本登入判断 和filter登入过滤

    JavaEE求职简历-姓名-JAVA开发工程师-范文.doc

    熟练掌握java基础,包括面向对象、多线程、IO流、UDP/TCP、socket、文件上传下载、XML解析、JSON解析、servlet、filter、listener、HTTP协议等等; 熟练掌握 使用jdbc标准连接数据库,掌握DDL、DML、DCL、DQL和...

    基于Android的学生信息管理系统

    最近上实训课,做了一个学生管理系统,App端基于Android实现,后台基于...JSON数据解析,Web的一些知识,如过滤器Filter、Servlet等等,怎么说呢,这个项目从Android到后台都是有值得学习的地方的,特此分享一下。

    SSH的jar包.rar

    1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求 2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,...

    javaee笔记

    笔记说明:包含servlet(高新技术、dom解析、sax解析、HTTP协议、JSP、DTD、自定义标签库、JSTL标签库、 EL表达式、Filter)、mysql、jdbc、文件上传与下载、Ajax、jQuery、struts2、struts2高级、spring、hibernate、...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    5.3.4 Servlet配置解析 5.3.5 使用Servlet处理业务逻辑 5.3.6 掌握Servelet处理流程 5.3.7 Eclipse快速创建Servlet 5.4 一夫当关——配置并应用Servlet过滤器 5.4.1 过滤器的基本原理 5.4.2 过滤器的核心API 5.4.3 ...

    how-tomcat-works

    11.6 FilterDef类 95 11.7 ApplicationFilterConfig类 96 11.8 ApplicationFilterChain类 96 11.9 应用程序 97 第12章 StandardContext类 98 12.1 概述 98 12.2 StandardContext的配置 98 12.2.1 StandardContext类...

    J2EE应用开发详解

    57 4.3.7 Servlet协作 57 4.3.8 Filter 58 4.4 使用Servlet处理客户端请求 58 4.5 会话跟踪 61 4.5.1 使用Cookie进行会话跟踪 61 4.5.2 使用URL重写进行会话跟踪 62 4.5.3 使用隐藏表单域进行会话跟踪 63 4.6 小结 ...

Global site tag (gtag.js) - Google Analytics