20201109 王维
学习总结
1 过滤器
Filter :是Java中预先定义好了的接口,可以过滤不同的内容,具体怎么过滤,需要使用者定义一个 实现类,然后实现接口中的过滤方法,在方法中书写过滤的条件。filter是对客户端访问资源的过滤,符 合条件放行,不符合条件不放行
1.1 创建过滤器
public interface Filter
我们创建一个过滤器的话需要实现 Filter 这个接口 ,然后doFilter 方法执行过滤器的功能
1.2 使用步骤
- 编写一个 Servlet ,路径为 /captcha
- 创建一个类实现过滤器接口 javax.servlet.Filter
- xml方式或者注解方式配置 过滤器拦截的请求路径(urlPatterns = "/captcha") 在 doFilter 方法中书写过滤任务
- filterChain.doFilter 方法放行
附:注解参数介绍
1.3 过滤器的执行流程
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 使用步骤
- 创建一个类实现 监听器接口
- 给这个类在xml中配置或者添加注解 @WebListener
- 实现 监听器接口 的抽象方法。
心得体会
今天学习了过滤器和监听器,这两个东西的原理可能不是太难,但是和以前的知识综合到一起,就很多地方理解不到,听课有点吃力。
评论留言