20201109 王维

学习总结

1 过滤器

Filter :是Java中预先定义好了的接口,可以过滤不同的内容,具体怎么过滤,需要使用者定义一个 实现类,然后实现接口中的过滤方法,在方法中书写过滤的条件。filter是对客户端访问资源的过滤,符 合条件放行,不符合条件不放行

1.1 创建过滤器

public interface Filter

我们创建一个过滤器的话需要实现 Filter 这个接口 ,然后doFilter 方法执行过滤器的功能

1.2 使用步骤

  1. 编写一个 Servlet ,路径为 /captcha
  2. 创建一个类实现过滤器接口 javax.servlet.Filter
  3. xml方式或者注解方式配置 过滤器拦截的请求路径(urlPatterns = "/captcha") 在 doFilter 方法中书写过滤任务
  4. filterChain.doFilter 方法放行

附:注解参数介绍

image-20201109232002458

1.3 过滤器的执行流程

image-20201109232040356

1.4 过滤器的生命周期

过滤器我们已经看到了他的执行流程,但是,过滤器只有被创建出来才能执行,因此,我们还要了解 过滤器生命周期。它包括了 init 、 doFilter 、 destroy 三个方法。

init 方法是初始化方法。当过滤器被部署到web服务器时,服务器启动的时候执行一次。

只要一个请求符合 Filter 拦截路径,都会执行 doFilter 。需要注意的是:如果需要让这个请求通过过 滤器,继续访问目标资源,一定得调用 FilterChain 对象的 doFilter 方法,要不然请求就被过滤器拦 截了。 FilterChain 对象的 doFilter 方法表示对于请求放行。

过滤器的销毁方法。服务器停止或者将项目从服务器中移除的时候,过滤器销毁,执行一次 destory 方 法。

1.5 映射路径

精确匹配模式:发出的路径需要与过滤器配置的路径完全一致,才能被这个过滤器过滤。例如需要对 /captcha 进行过 滤

模糊匹配模式:

  • 整个应用的配置,创建 UrlFilter 过滤器的配置的过滤路径为 /* ,浏览器发出当前项目的任何请求都会经过当前过滤器
  • 修改 UrlFilter 过滤器的注解配置的过滤路径为 /admin/* ,浏览器发出当前项目下 admin 下的任何请求,都会经过过滤器
  • 修改 UrlFilter 过滤器的注解配置的过滤路径为 *.jsp ,浏览器访问当前项目下的任何 jsp 页面,都会经过过滤器。

1.6 拦截方式

request是默认的拦截方式:浏览器(客户端)发出的请求都会进行拦截。

forward 拦截方式:当前拦截方式表示只有在进 行请求转发时,才会拦截请求进行过滤。

2 监听器

web监听器是一种 Servlet 中的特殊的类,它们能帮助开发者监听web中的特定事件,比如 ServletContext , HttpSession , ServletRequest 的创建和销毁等。可以在某些动作前后增加处理, 实现监控。

2.1 常见的监听器

// 容器的创建和销毁
javax.servlet.ServletContextListener 作用是监听 ServletContext 的创建和销毁
javax.servlet.http.HttpSessionListener 作用是监听 HttpSession 的创建和销毁
javax.servlet.ServletRequestListener 作用是监听 ServletRequest 的创建和销毁
// 容器属性的监听, 包括 添加/替换/删除
javax.servlet.ServletContextAttributeListener 作用是监听 ServletContext 属性的变化
javax.servlet.http.HttpSessionAttributeListener 作用是监听 HttpSession 属性的变化
javax.servlet.ServletRequestAttributeListener 作用是监听 ServletRequest 属性的变化

2.2 使用步骤

  1. 创建一个类实现 监听器接口
  2. 给这个类在xml中配置或者添加注解 @WebListener
  3. 实现 监听器接口 的抽象方法。

心得体会

今天学习了过滤器和监听器,这两个东西的原理可能不是太难,但是和以前的知识综合到一起,就很多地方理解不到,听课有点吃力。

标签

评论

this is is footer