版权声明:文章为作者自己原创文章,转载请注明出处。 https://blog.csdn.net/qq_37128049/article/details/85272954
今日内容
1.FIlter:过滤器
2.Listener:监听器
Filter:过滤器
1.概念:
* 生活中的过滤器:净水器,空气净化器。
* web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
* 过滤器的作用:
* 一般用于一些完成通过的操作,如:登录验证,统一编码处理(设置请求信息编码和响应信息编码),敏感词操作。
*
2.快速入门:
1.步骤
1.定义一个类,实现接口Filter 导包一定要:javax.servlet包下的Filter;
* 如果调用方法的时候没有该功能方法,那么可能是导错包了。
2.复写方法
3.配置拦截路径
1.注解配置 @WebFilter("/*") 访问所有路径。 @WebFilter("/demo")访问demo的文件。
* 执行了语句之后要考虑放行: filterChain.doFilter(servletRequest,servletResponse); 如果请求的是Servlet,则此方法会放请求去请求Servlet。如果没有这行代码,那么Filter则不放行,响应就会返回浏览器。(过滤器中的代码会执行两次 --过去一遍,回来一遍。)
2.web.xml配置
-- 过程:
* 浏览器发出请求,服务器接收到请求
* 找有没有配置过滤器,如果有。符不符合过滤器的拦截路径
如果符合则被拦住
1.放行:直接访问资源
2.不放行:原路返回
-- 如果不符合直接可以访问资源。
2.过滤器细节:
1.web.xml配置
* 参见截图文档。
2.过滤器执行流程
* 执行过滤器
* 执行放行后的资源
* 回来执行过滤器放行代码下边的代码。
3.过滤器生命周期方法
* init:servlet被创建的时候执行一次。(当服务器启动之后会直接创建Filter对象),用于加载资源。
* destroy:servlet被销毁的时候执行一次。(当服务器正常关闭则执行此方法),用于释放资源。
* doFilter:当浏览器发出请求,并且请求的路径符合此Filter拦截路径,则doFilter方法会被调用一次。可执行多次。
4.过滤器配置详解
* 拦截路径配置:
1.具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行。
2.拦截目录:/user/* :访问/user下的所有资源时,过滤器都会被执行
3.后缀名拦截:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行。
4.拦截所有资源:/* 访问所有资源时,过滤器都会执行。
* 拦截方式配置:资源被访问的方式。
* 注解配置:
* 设置dispatcherTypes属性
1.REQUEST:默认值,浏览器直接请求资源。
2.FORWARD:转发访问资源
3.INCLUDE:包含访问资源
4.ERROR:错误跳转资源
5.ASYNC:异步访问资源
* web.xml配置
设置dispatcherTypes
* 枚举的内容相当于看到静态常用。
5.过滤器链(配置多个过滤器)
* 执行顺序:如果有两个过滤器:过滤器1和过滤器2
1.过滤器1先执行
2.过滤器2再执行
3.资源执行
4.过滤器2
5.过滤器1
步骤演示:过滤器1-->过滤器2-->资源执行-->过滤器2-->过滤器1
* 过滤器先后顺序问题:
1.注解配置:按照类名的字符串比较,值小的先执行,从首字母开始,自然顺序开始逐个比较,如果相等则取下一个比较,直到比出大小为止,字母在前的为先,数字小的为先,谁小先执行谁。
* 如:AFilter和BFilter,那么AFilter先执行。
2.web.xml配置:<filter-mapping>谁定义在上边,谁先执行。
* 配置多个过滤器可以让每个过滤器实现单独的功能,解耦合。
* 如何知道此请求是否是已经登录的用户:
* 如果登录了,则在Session中存一个登录用户的id;
* 有表示已经登录过了,则放行。
* 如果没有,则没有登录,跳转到登录页面。
-- 开闭原则:对于修改是关闭的,对于扩展是开放的。
4.案例:
1.案例1_登录验证: 需要排除登录页面,css文件,js文件,验证码服务器文件等。
* 需求:
1.访问day17_case案例的资源。验证其是否登录
2.如果登录了,则直接放行
3.如果没有登录,则跳转到登录页面,提示:“您尚未登录,请先登录”。
2.案例2_敏感词汇过滤
* 需求:
*