天天看点

Javaweb复习巩固

第七天: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(监听器)

  1. 监听器,监听事件()

事件 : 在某个元素上的一个动作(服务器发出来的事件)

监听 :

监听器 :

javaWeb中的监听器是用来监听域对象(request  session  ServletContext)

域对象的创建和销毁

5.ServeltContextListener

监听ServletContext对象的创建和销毁的

创建 : 服务器一启动,立马会创建(一个项目只有一个ServletContext)

销毁 :   服务器关闭的时候销毁

个人理解:监听对象的创建和销毁

在对象的初始化的时候可以做一些事情

如果对象创建了,可以加载配置文件帮我们创建对象等事情

可以在对象初始化的时候加载资源

和在对象销毁的时候销毁资源

  使用步骤

  1. 编写类实现ServletConextListener接口,重新方法
  2. 配置Listener(xml配置和注解配置)

Session创建

在一次会话中:第一次调用Request.getSession()

访问Servlet:不一定

访问jsp:会创建

今日学习感受:年轻就是要多学习,学习自己感兴趣的,编程开始哭闹不太感兴趣,可是学着学着也是感觉挺有意思,渐渐对编程产生了兴趣,有些东西没有兴趣可以培养出兴趣,渐渐的把学习当成一种习惯,这种习惯会伴随一生,成为对你人生有益的技能。学习可以变得跟别人不一样,加油!最后一句话:学无止境。