过滤器的基本攻略

本文详细介绍了过滤器Filter在Web应用程序中的应用场景,如自动登录、编码格式设置、访问权限控制等。解析了过滤器的工作原理,包括其在客户端与应用程序间的作用,以及如何通过过滤器链实现多层次的请求和响应处理。同时,提供了实现Filter接口的示例代码,并解释了init、doFilter和destroy方法的功能。
摘要由CSDN通过智能技术生成

过滤器Filter

主要的应用场景有:

  • 自动登录
  • 统一设置编码格式
  • 访问权限控制
  • 敏感字符过滤等

 

过滤器的概念:

过滤器位于客户端和web应用程序之间,用于检查修改两这之间流过的请求和响应

在请求到达Servlet/Jsp之前,过滤器接货请求

在响应送给客户端之前,过滤器截获响应

多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射<filter-mapping>的顺序决定。

最先截获客户请求的过滤器将最后截获Servlet/Jsp的响应信息。

过滤器的链式结构

可以为一个Web应用程序部署多个过滤器,这些过滤器组成一个过滤器链,每个过滤器只执行某个特定的操作或者检查,这样请求在到达被访问的目标之前,需要经过这个过滤器。只有当客户端的请求符合过滤器的时候才会执行指定的操作指令。

实现过滤器

在Web应用中使用过滤器需要实现javax.servlet.Filter接口,实现Filter接口中所定义的方法,并在web.xml中部署过滤器。

 1 public class MyFilter implements Filter {
 2  
 3     public void init(FilterConfig fc) {
 4         //过滤器初始化代码 接收一个FilterConfig类型的参数 该参数是对Filter的一些配置
 5     }
 6  
 7     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
 8         //在这里可以对客户端请求进行检查
 9         //沿过滤器链将请求传递到下一个过滤器。
10         chain.doFilter(request, response);
11         //在这里可以对响应进行处理
12  
13     }
14  
15     public void destroy( ) {
16         //过滤器被销毁时执行的代码
17     }
18  
19 }

Filter常用的接口方法

方法名称功能描述

 

public void init(FilterConfig config)

 

容器在实例化过滤器调用。FilterConfig对象包含Filter相关的配置信息

 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

 

每当请求和响应经过过滤器链时,容器都调用一次该方法。过滤器的一个实例可以同时服务于多个请求,需要注意线程同步问题,尽量不用或少用实例变量。 在过滤器的doFilter()方法实现中,任何出现在FilterChain的doFilter方法之前地方,request是可用的;在doFilter()方法之后response是可用的。

 

public void destroy()

 

容器调用destroy()方法指出将从服务中删除该过滤器。如果过滤器使用了其他资源,需要在这个方法中释放这些资源。

 

部署过滤器

<filter-mapping>标记是有先后顺序的,它的声明顺序说明容器是如何形成过滤器链的。过滤器应当设计为在部署时很容易配置的形式。通过使用初始化参数,可以得到复用性很高的过滤器

过滤器逻辑与Servlet逻辑不同,它不以来任何用户状态信息,因为一个过滤器实例可能同时处理多个完全不同的请求。

需要注意的是
过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法.
当Filter被移除或服务器正常关闭时,会执行destroy方法

转载于:https://www.cnblogs.com/wudidamowang666/p/11295408.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值