第七天:Filter(过滤器) listener(监听器)
web三大组件:Servlet,Filter,listener
1.Filter(过滤器):是在用户请求到达servlet之前帮你做预处理
它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response
拦截请求(做一些处理)
Filter原理:
Filter使用步骤:
1.创建类实现Filter接口实现(重写)所有方法
2.配置Filter
可以web.xml配置和注解配置
3.在filter中的doFilter方法中拦截请求
例子:
package com.swlz.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter("/*")//配置Filter拦截路径 /*表示拦截所有 可以xml配置或者注解配置 public class FilterDemo1 implements Filter { public void init(FilterConfig config) throws ServletException { System.out.println("Filter创建了"); } public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { System.out.println("FilterDemo1..........doFilter...............before...."); chain.doFilter(req,resp);//放行请求 请求到达servlet (请求到达下一个资源) System.out.println("FilterDemo1..........doFilter..................after."); } @Override public void destroy() { System.out.println("Filter销毁了"); } }
2.Filter生命周期:
创建: 服务器启动的时候会创建Filter 执行init方法
拦截请求:每一次请求拦截的时候执行doFilter方法(在新的线程中)
销毁: 服务器关闭的时候销毁Filter 执行destory方法
注意:
Filter是单例对象
一次请求 ----- request对象 ----- 一个线程
3.Filter的执行流程:
客户端发送请求到服务器的时候,如果请求路径能够被Filter拦截,先执行Filter的doFilter方法
在filter的doFilter方法中,我们需要执行filterChain.doFilter(servletRequest,servletResponse);
在这个方法执行前的代码我们可以针对request做增强
在这个方法执行后的代码我们可以针对response做增强
注意:多个Filter如果是web.xml配置,谁先配置(Filter-mapping),谁先执行
如果是注解配置,按照类名的字典顺序去依次执行(如果是注解配置就按自然排序进行先后执行)
4.Listener(监听器)
- 监听器,监听事件()
事件 : 在某个元素上的一个动作(服务器发出来的事件)
监听 :
监听器 :
javaWeb中的监听器是用来监听域对象(request session ServletContext)
域对象的创建和销毁
5.ServeltContextListener
监听ServletContext对象的创建和销毁的
创建 : 服务器一启动,立马会创建(一个项目只有一个ServletContext)
销毁 : 服务器关闭的时候销毁
个人理解:监听对象的创建和销毁
在对象的初始化的时候可以做一些事情
如果对象创建了,可以加载配置文件帮我们创建对象等事情
可以在对象初始化的时候加载资源
和在对象销毁的时候销毁资源
使用步骤
- 编写类实现ServletConextListener接口,重新方法
- 配置Listener(xml配置和注解配置)
Session创建
在一次会话中:第一次调用Request.getSession()
访问Servlet:不一定
访问jsp:会创建
今日学习感受:年轻就是要多学习,学习自己感兴趣的,编程开始哭闹不太感兴趣,可是学着学着也是感觉挺有意思,渐渐对编程产生了兴趣,有些东西没有兴趣可以培养出兴趣,渐渐的把学习当成一种习惯,这种习惯会伴随一生,成为对你人生有益的技能。学习可以变得跟别人不一样,加油!最后一句话:学无止境。