javaWeb--之--过滤器(filter)篇

一、过滤器

1.1定义

过滤器是一个服务器端的组件,它可以截取用户端的请求与响应信息,并对这些信息进行过滤。

1.2工作原理

1、项目启动时,从Web容器中加载过滤器;

2、过滤器存在于用户请求和Web资源之间;

3、用户请求和Web响应之间的收发都经由过滤器按照过滤规则进行过滤筛选。

1.3过滤器的生命周期

实例化(web.xml加载)→初始化(init方法)→过滤(doFilter方法)→销毁(destroy方法)

1、初始化:当容器第一次加载该过滤器时,init() 方法将被调用。该类在这个方法中包含了一个指向 Filter Config 对象的引用。我们的过滤器实际上并不需要这样做,因为其中没有使用初始化信息,这里只是出于演示的目的。

2、过滤:过滤器的大多数时间都消耗在这里。doFilter方法被容器调用,同时传入分别指向这个请求/响应链中的 Servlet Request、Servlet Response 和 Filter Chain 对象的引用。然后过滤器就有机会处理请求,将处理任务传递给链中的下一个资源(通过调用 Filter Chain 对象引用上的 doFilter方法),之后在处理控制权返回该过滤器时处理响应。

3、销毁:容器紧跟在垃圾收集之前调用 destroy()方法,以便能够执行任何必需的清理代码。

过滤器链:服务器会按照web.xml中过滤器定义的先后顺序组装成一条链

1.4过滤器在web.xml中的基本配置

过滤器在web.xml中的的配置:

<filter>
    <filter-name>过滤器名称</filter-name>
    <filter-class>过滤器完整类名</filter-class>
    <init-param>
        <description>描述信息,可以省略</description>
        <param-name>参数名称</param-name>
        <param-value>参数值</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>过滤器名称</filter-name>
    <url-pattern>URL</url-pattern>
    <dispatcher>[REQUEST|INCLUDE|FORWARD|ERROR]</dispatcher>
</filter-mapping>

二、过滤器的基本使用

2.1 过滤器类的设计

实现Filter接口,重写init、doFilter、destroy方法

public class MyFilter implements Filter{
    public void init(FilterConfig filterConfig) throws ServletException{}
    /**
    *使浏览器不缓存页面的过滤器
    */
    public void doFilter(ServlerRequest request,ServletResponse response,FilterChain filterChian) throws IOException,ServletException{
      ((HttpServletResponse) response).setHeader("Cache-Control","no-cache");
      ((HttpServletResponse) response).setHeader("Pragma","no-cache");
      ((HttpServletResponse) response).setDateHeader ("Expires", -1);
      filterChain.doFilter(request, response);//将处理任务传递给过滤器链中的下一个资源
    }
    public void destroy(){}
}

2.2 过滤器在web.xml中的注册

1、REQUEST、FORWARD、INCLUDE等类型过滤器的注册

<!-- 过滤器配置 -->
<filter>
    <filter-name>myFilter</filter-name>
    <filter-class>util.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myFilter</filter-name>
    <url-pattern>/main.jsp</url-pattern>
    <dispatcher>[REQUEST|FORWARD|INCLUDE]</dispatcher>
</filter-mapping>

2、ERROR类型的过滤器注册

<!-- 配置错误页面,当出现404错误则跳转至/error.jsp页面 -->
<error-page>
    <error-code>404</error-code>
    <location>/error.jsp</location>
<error-page>
<!-- 过滤器配置 -->
<filter>
    <filter-name>errorFilter</filter-name>
    <filter-class>util.filter.ErrorFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>errorFilter</filter-name>
    <url-pattern>/error.jsp</url-pattern>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

三、Servlet3.0中过滤器的使用

加上 @WebFilter 注解即可,无需在web.xml中注册

@WebFilter(servletNames={"SimpleServlet"},filterName="SimpleFilter")
public class MyFirstFilter implements Filter{}
@WebFilter常用属性表
属性名 类型 描述
filterName String 指定过滤器的name属性,等价于<filter-name>
value String[] 等价于urlPatterns属性,但是两者不要同时使用,若同时使用,优先使用value属性
urlPatterns String[] 指定一组过滤器的URL匹配模式,等价于<utl-pattern>标签
servletNames String[] 指定过滤器将应用于哪些Servlet。取值是@WebServlet中的name属性值,或者是web.xml中的<servlet-name>取值
dispatcherTypes DispatcherType 指定过滤器的转发模式。具体取值包括ASYNC、ERROR、FORWARD、INCLUDE、REQUEST
initParams WebInitParam[] 指定一组过滤器初始化参数,等价于<init-param>标签
asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于<async-supported>标签
description String 该过滤器的描述信息,等价于<description>标签
displayName String 该过滤器的显示名,等价于<display-name>标签

参考资料:慕课网【JAVA Web开发技术应用——过滤器】http://www.imooc.com/learn/213

时间: 2024-08-04 19:29:44

javaWeb--之--过滤器(filter)篇的相关文章

深入分析JavaWeb Item36 -- 过滤器Filter高级应用

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 使用代理 在阎宏博士的<JAVA与模式>一书中

JavaWeb的过滤器Filter

Filter的作用是在请求到达web资源(HTML.css.Servlet.Jsp)之前拦截,做一个预处理. 创建一个类实现Filter接口,在web.xml中对文件进行配置 1 <filter> 2 <filter-name>Filter的别名</filter-name> 3 <filter-class>Filter的全类名</filter-class> 4 </filter> 5 <filter-mapping> 6

JavaWeb--Servlet过滤器Filter和SpringMVC的HandlerInterceptor(Session和Cookie登录认证)

拦截一些请求进行处理,比如通过它来进行权限验证,或者是来判断用户是否登陆,日志记录,编码,或者限制时间点访问等等,是非常有必要的.所以就有了此篇文章啦. 文章结构:(1)Servlet过滤器Filter:(2)SpringMVC的HandlerInterceptor:(3)对比认知. 一.Servlet过滤器Filter: 此部分是从赵四大佬那里学来的,并补充自己的认知 (1)概念: 能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,它只能

javaweb-Servlet过滤器Filter

一.在javaweb学习中javaweb过滤器是一个非常重要的学习内容在web开发阶段的中Javaweb过滤器可以很好的优化代码,同时减少许多不必要的代码,将代码很好的集合在一起,这样的操作可以减少许多不必要的代码,同时大大的减少程序的运行. 二.正对于javaweb的过滤器Filter可以从以下几个方面进行讲解 1.Javaweb的概念 javaweb是一个服务器组键,他可以截取用户端的请求以及响应的信息,并且对信息进行过滤. 2.过滤器的api  Servlet过滤器API包含了3个接口,它

JavaWeb学习篇之----Servlet过滤器Filter和监听器

JavaWeb学习篇之----Servlet过滤器Filter和监听器 首先来看一下Servlet的过滤器内容: 一.Servlet过滤器的概念: *************************************************************************************** Servlet过滤器是在Java Servlet规范2.3中定义的,它能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,

【JavaWeb学习】过滤器Filter

一.简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技

JavaWeb过滤器Filter

Filter也称为过滤器,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制,页面的同一编码,过滤敏感词汇.压缩响应信息等一些高级功能! Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技术,开发人员可以实现用户在访问某个目标资

javaweb学习总结——Filter(过滤器)学习

一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过F

JavaWeb之过滤器

时间: Talk is cheap  Show me the code JavaWeb三大组件:    Servlet.Listener.Filter    都需要在web.xml中进行配置,Listener中的两个感知监听器不需要配置. --过滤器概述 过滤器是JavaWeb的三大组件之一,它与Servlet很相似,不过过滤器是用来拦截请求的,而不是处理请求的. 当用户请求某个Servlet或其他资源(JSP.css.html)时,会先执行部署在这个请求上的Filter,如果Filter"放行

AngularJS过滤器filter入门

在开发中,经常会遇到这样的场景 如用户的性别分为“男”和“女”,在数据库中保存的值为1和0,用户在查看自己的性别时后端返回的值自然是1或0,前端要转换为“男”或“女”再显示出来: 如我要换个羽毛球拍,某猫上羽毛球拍的品牌多达数十种,我想单独查看YONEX这个品牌的羽毛球拍: 买完羽毛球拍我还想买一桶羽毛球,点击按销量排序展示商品: 以上三种场景分别对数据进行了转换/筛选/排序,总而言之就是对数据的格式化,AngularJS的filter就是用来做这个事的. 内置过滤器 AngularJS内置了很