servlet过滤器是服务器与客户端请求与响应的中间层组件,它主要是用于对浏览器的请求进行过滤处理,并将过滤后的请求再转给下一个资源。
servlet过滤器的基本概念
Servlet过滤器从字面上的字意理解为经过一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。
Filter是在Servlet 2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成。
过滤器是以一种组件的形式绑定到WEB应用程序当中的,与其他的WEB应用程序组件不同的是,过滤器是采用了“链”的方式进行处理的。
Filter
Servlet过滤器Fileter是一个小型的web组件,它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数据,实现“过滤”的功能。Filter通常封装了一些功能的web组件,过滤器提供了一种面向对象的模块化机制,将任务封装到一个可插入的组件中, Filter组件通过配置文件来声明,并动态的代理。
简单来说Servlet的Filter是:
● 声明式的:通过在web.xml配置文件中声明,允许添加、删除过滤器,而无需改动任何应用程序代码或jsp页面。
● 灵活的:过滤器可用于客户端的直接调用执行预处理和后期的处理工作,通过过滤链可以实现一些灵活的功能。
● 可移植的:由于现今各个web容器都是以Servlet的规范进行设计的,因此Servlet过滤器同样是跨容器的。
● 可重用的:基于其可移植性和声明式的配置方式,Filter是可重用的。
总的来说,Servlet的过滤器是通过一个配置文件来灵活的声明的模块化可重用组件。过滤器动态的截获传入的请求和传出的响应,在不修改程序代码的情况下,透明的添加或删除他们。其独立于任何平台和web容器。
1. Servlet : 接收用户请求, 处理用户请求,
2. Filter : 拦截用户请求
3. Listener: 监听器, 监听javaWeb的行为: 类似js的事件机制, tomcat启动,session创建, session 销毁 。
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。
过滤器实现:
编写一个类实现javax.servlet.Filter接口
重写Filter接口的抽象方法
在web.xml文件中配置过滤器, web3.0以上版本, 支持注解
<!--拦截器--><filter><filter-name>AFilter</filter-name><filter-class>com.fs.web.filter.AFilter</filter-class></filter><filter-mapping><filter-name>AFilter</filter-name><!--拦截的路径: 一般结合*/* 拦截所有, 包括Servlet,jsp,静态资源--><url-pattern>/*</url-pattern></filter-mapping>放行:
//放行:filterChain.doFilter(servletRequest,servletResponse);
多个过滤器执行顺序:
web.xml文件配置的, 根据filter的<filter-mapping>
位置决定, 谁<filter-mapping>
在前,谁先执行
在web3.0 提供注解的方式: @WebFilter("/*")
执行顺序,根据 Filter位置决定, 谁在前,谁先执行