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

一. web过滤器的介绍

1.过滤器

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

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

2.web过滤器

过滤器在web中的应用定义

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

3.web过滤器的工作原理

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

没有过滤器的情况下

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


过滤器的工作原理

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

3.web过滤器的生命周期

web的生命周期分为四种

过滤器的生命周期
  • 实例化:在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接口

创建FirstFilter类

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

  
  
  
    Filter名字
    Filter的完整类名称
    描述信息
    
        参数名称
        参数的值
    
  
  
    Filter名字
    URL
    
  
  

注意

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

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

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

FirstFilter类
index.jsp文件

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

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

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

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

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

面试题两点:

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

三.过滤器链

1.过滤器链

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

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

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

过滤链的执行顺序及原理

你可能感兴趣的:(Java web开发--过滤器篇(详细介绍))