Java web开发--过滤器篇(详细介绍)

一. web过滤器的介绍

1.过滤器

在生活中,过滤这种我们时常可见;比如水资源的处理,化学药剂的提取等等。所谓过滤,就是指对某事物的处理进行一定的处理获取相应的结果的一个过程。它可以总结为下:

过滤源==>过滤规则==>过滤结果
过滤源:需要过滤的东西
过滤规则:对过滤东西的处理
过滤结果:经过过滤后所得的东西

2.web过滤器

过滤器在web中的应用定义

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

3.web过滤器的工作原理

在没有过滤器的情况下,用户的请求可以直接进行访问服务器web资源

6275828-e4067616bedd89ee.png
没有过滤器的情况下

在存在过滤器的情况下,客户端的请求是不能直接访问服务器端web资源。
过滤器的具体工作原理:


6275828-a5ed53b35080686b.png
过滤器的工作原理

过滤器在web程序启动的时候便会进行加载。用户发送请求并不是直接到web资源,而是先到过滤器;过滤器判断我们的请求是否合法、是否符合规则;符合规则后过滤器再将用户请求发送到web资源;web资源处理完信息响应到过滤器;过滤器再将web资源的响应发送给用户

3.web过滤器的生命周期

web的生命周期分为四种

6275828-501ce9cef20bd699.png
过滤器的生命周期
  • 实例化:在web程序启动的时候,通过web.xml文件中的配置去加载过滤器。只会实例化一次。
  • 初始化:启动后,会进入到初始化。会调用init()方法加载初始化信息。只执行一次。
  • 过滤:过滤器每次捕获到请求都会执行过滤方法doFilter()。可执行多次。
  • 销毁:web容器关闭的时候执行destory()方法销毁过滤器对象。

4.web过滤器中的方法

  • init():过滤器的初始化方法,web容器创建过滤器实例后将调用这个方法,这个方法可以读取web.xml文件中过滤器的参数。
  • doFilter():这个方法完成实际的过滤操作,想过滤器的核心方法。当用户访问请求与过滤器关联的URL时,web容器将先调用过滤器的doFilter()方法。FilterChain参数可以调用chain.doFilter()方法,将请求传给下一个过滤器(或目标资源),或利用转发、重定向将请求转发到其他资源。
  • destroy():web容器在销毁过滤器实例前调用该方法,在这个方法中可以释放过滤器占用的资源。(大多数情况用不到)

二.过滤器简单案例

1.创建web项目。并创建一个类实现Filter接口

6275828-691ac37bb592d36d.png
创建FirstFilter类

2.在web.xml中配置过滤器

  <!-- ……………… -->
  <!-- Filter配置 -->
  <filter>
    <filter-name>Filter名字</filter-name>
    <filter-class>Filter的完整类名称</filter-class>
    <description>描述信息</description>
    <init-param>
        <param-name>参数名称</param-name>
        <param-name>参数的值</param-name>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>Filter名字</filter-name>
    <url-pattern>URL</url-pattern>
    <dispatcher></dispatcher>
  </filter-mapping>
  <!-- ……………… -->

注意

  • filter-class:必须是类的全路径(即包括报名)
  • init-param:初始化参数,可以是零对或者多对
  • url-pattern:当用户请求的URL和指定的URL路径相匹配时,将触发过滤器工作
  • dispatcher:指定过滤器所拦截资源被Servlet容器调用的方式。可以使REQUEST,INCLUDE,FORWARDERROR之一,默认是REQUEST
6275828-439d4f6b65563ebf.png
我的配置

3.在类中写输出数据测试

在Filter的实现类中的方法中写入输出数据,在index.jsp中前面增加输出。方便之后看到过滤器执行耳朵顺序。

6275828-de3c579802384995.png
FirstFilter类
6275828-7002f399fe836e13.png
index.jsp文件

4.启动服务器,访问index.jsp页面

访问https://http://127.0.0.1:8080/Filter/后仔细观察运行结果

6275828-b497393c04e73722.png
在tomcat服务器启动时执行了构造方法和init()方法
6275828-d9eb316cb99608fb.png
访问jsp页面时执行了doFilter方法

所以可以总结Filter实现类中方法的运行顺序为:

构造器==> init() ==> doFilter() ==>…………==> destroy()
在执行doFilter()方法时,chain.doFilter()方法将请求传给了index.jsp,最后才输出end……doFilter

面试题两点:

1.过滤器可以更改用户请求的路径
2.过滤器不能直接处理用户请求的数据,也不能直接返回数据

三.过滤器链

1.过滤器链

过滤器链:指针对一个用户请求,而根据路径所匹配到的过滤器有多个。这时候用户请求就会依次通过各个过滤器到达web资源。

2.过滤器链的执行顺序以及原理

服务器会按照web.xml文件中过滤器定义的先后顺序组装成一条过滤器链。通过doFilter()方法依次执行后面的过滤器直至所有过滤器执行完毕后访问到web资源。

6275828-156f5bbc26ba434f.png
过滤链的执行顺序及原理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值