一,创建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代码如下
新闻热点
疑难解答