Filter的使用实例

来源:互联网 发布:淘宝买家好评率百分百 编辑:程序博客网 时间:2024/06/03 06:12

一,创建Filter类
1.如何创建Filter类?
创建Filter类必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
(1)void init(FilterConfig config):用于完成Filter的初始化
(2)void destroy():用于Filter销毁前,完成某些资源的回收
(3)void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):实现过滤功能
下面介绍一个日志Filter,这个Filter负责拦截用户所有请求,并将请求的信息记录在日志中。
这里写图片描述
这里写图片描述

二,配置Filter
Filter可以认为是Servlet的“增强版”,因此配置Filter与配置Servlet非常的相似,都需要配置如下两个部分:
1.配置Filter名
2.配置Filter拦截URL模式
Filter配置和Servlet配置的区别?
Servlet通常只配置一个URL,而Filter可以同时拦截多个请求的URL。因此,在配置Filter的URL模式时通常会使用模式字符串,使得Filter可以拦截多个请求。与配置Servlet相似的是,配置Filter同样有两种方式
1.在Filter通过注解进行配置
2.在web.xml文件中通过配置文件进行配置

@WebFilter修饰一个Filter类,用于对Filter进行配置,它支持如下的属性:
这里写图片描述
在web.xml文件中的配置如下
这里写图片描述
从这些代码中可以看出配置Filter与配置Servlet非常相似,只是配置Filter时指定url-pattern为/*,即表示该Filter会拦截所有用户请求。该Filter并未对客户端请求进行额外的处理,仅仅在日志中简要记录请求的信息。
为该Web应用提供任意一个JSP页面,并通过浏览器来访问该JSP页面,即可在Tomcat的控制台看到信息。

实际上Filter和Servlet极其相似,区别只是Filter的doFilter()方法里多了一个FilterChain的参数,通过该参数可以控制是否放行用户的请求,在实际项目中,Filter里doFilter()方法里的代码就是从多个Servlet的service()方法里抽取通用代码,通过使用Filter可以实现更好地代码复用。
假设系统里包括多个Servlet,这些Servlet都需要进行一些的通用处理:比如权限控制,记录日志等,这将导致在这些Servlet的service()方法中有部分代码是相同的—–为了解决这种代码重复的问题,可以考虑把这些通用处理提取到Filter中完成,这样各Servlet中剩下的只是特定请求相关的处理代码,而通用处理则交给Filter完成。

这里写图片描述
下面将定义一个较为实用的Filter,该Filter对用户请求进行过滤,Filter将通过doFilter()方法来设置request编码的字符集,从而避免每个JSP,Servlet都需要设置;而且还会验证用户是否登陆,如果用户没有登录,系统直接跳转到登陆页面。
这里写图片描述
这里写图片描述
在web.xml文件中配置该文件的配置片段代码如下:
这里写图片描述
相对应的JSP代码如下
这里写图片描述
这里写图片描述

0 0
原创粉丝点击