Filter与Listener – 过滤器和监听器详解 轻松学习

文章目录
过滤器FilterFilter概述Filter过滤器生命周期Filter执行流程Filter过滤器链 – 多个过滤器的执行流程(一路执行,再原路返回)Filter过滤器url-pattern路径匹配方式Filter过滤器dispatcher属性【**】Filter案例 – 解决乱码问题 (一般Filter也是用于这个)
监听器Listener监听器Listener概述监听器类型

过滤器Filter
Filter概述

  Filter(过滤器)是Java Web开发的三大组件之一(Servlet Filter Listener)
  一般用于对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理

  最常用与解决乱码问题(配置全局拦截器,拦截所有请求,给request和response都设置编码,然后放行)

Filter过滤器生命周期

    init方法:服务器启动时就创建该Filter对象,执行init()方法doFilter方法:每当一个请求的路径是满足过滤器的配置路径,那么就会执行一次过滤器的doFilter()方法destory方法:服务器关闭的时候销毁Filter,执行destory()方法

Filter执行流程

Filter与Listener - 过滤器和监听器详解 轻松学习

    浏览器发送请求,tomcat服务器将http请求转成request对象,http响应转response对象通过访问url的地址查找,找到对应的Filter过滤器将request,resposne传给它的doFilter()方法处理之后调用chain.doFilter(request,response)方法(放行,如果没有放行,则直接响应给浏览器,不继续往下执行)chain.doFilter()放行之后,找到对应的html、jsp、servlet,然后进行处理处理完成之后将response返回给Filter,然后Filter执行后面的代码(doFilter()方法里面的)执行完剩余代码之后,将reponse响应给 浏览器

doFilter()方法的内部执行顺序:
– 先执行doChain之前的代码,再执行doChain方法放行
– 再执行Servlet的doGet/doPost或者jsp、html代码
– 最后执行doChain之后的代码

Filter过滤器链 – 多个过滤器的执行流程(一路执行,再原路返回)

  多个 Filter 过滤器都对同一个 URL 进行拦截,这些 Filter 就会组成一个Filter 链,Filter 链用 FilterChain 对象表示。

  会依次调用过滤器处理,当过滤器有chain.doFilter(request,response)放行才会继续往后面的过滤器执行,否则返回响应。
Filter与Listener - 过滤器和监听器详解 轻松学习

执行顺序是:

浏览器 –> doFilter_1(chain.doFilter()方法) –> doFilter_2(chain.doFilter()方法) –> … –> doFilter_n(chain.doFilter()方法) –> 找到资源(Servlet,jsp,html等 ) –> doFilter_n剩余部分 –> … –> doFilter_2剩余部分 –> doFilter_1剩余部分 –> 最后响应给浏览器

Filter过滤器url-pattern路径匹配方式

1:完全路径匹配(名称完全相同才行)
@WebFilter("/user")
@WebFilter("/user/hello")
2:目录匹配(满足目录下的所有文件都匹配)
@WebFilter("/*")
@WebFilter("/user/*")
3:扩展名匹配(后缀扩展名相同就匹配)
@WebFilter("*.html")
@WebFilter("*.jsp")



Filter过滤器dispatcher属性【**】

    REQUEST:默认值,代表直接通过url地址访问某个资源时执行对应的Filter(重定向)FORWARD:通过请求转发的时候执行对应的Filter
    【dispatcher属性为默认值REQUEST的时候,就算url匹配,对应的Filter也是不会拦截 请求转发到这个url的方式】
@WebFilter(value = "/index.jsp",dispatcherTypes={DispatcherType.REQUEST,DispatcherType.FORWARD})

Filter案例 - 解决乱码问题 (一般Filter也是用于这个)

// 拦截所有请求,对所有请求的request、response做编码设置
@WebFilter("/*")
public class CharSetFilter implements Filter {

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//1、设置request、response编码
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");

//2. 放行request和response
chain.doFilter(req, resp);
}
}


监听器Listener
监听器Listener概述
监听器Listener是用来监听域对象(域对象ServletContext,HttpSession和ServletRequest【也就是监听的数据源】)监听哪个域就实现对应的接口就行
监听器类型

    监听域对象自身的创建和销毁的事件监听器。监听域对象中的属性的增加和删除的事件监听器。监听绑定到HttpSession域中的某个对象的状态的事件监听器。

特点:

不需要监听地址(不需要写路径,只需要注解 @WebListener() 表示这是一个监听器就行)

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

Filter与Listener - 过滤器和监听器详解 轻松学习

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » Filter与Listener – 过滤器和监听器详解 轻松学习
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏