过滤器Filter 监听器Listener ServletContext

目录

Filter

Filter使用

Filter过滤器细节

1过滤器生命周期

2过滤器配置讲解

3过滤器链(配置多个过滤器)

监听器

监听器使用

ServletContext


Filter

Tomcat中的过滤器:当访问服务器的资源时,过滤器可以将请求Servlet之前拦截下来,完成一些特殊的功能。

一般用于完成通过的操作。如:登录验证,统一编码处理,敏感字符过滤..

过滤器执行流程

  • 1:执行过滤器

  • 2:执行放行后的资源

  • 3:回来执行过滤器放行后的代码执行

Filter使用

定义一个类,实现接口Filter

②:复写方法

③:配置拦截路径

  • web.xml

 <filter>
        <filter-name>myfilter</filter-name>
        <filter-class>com.rocky.Filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myfilter</filter-name>
<!--        配置的是拦截的路径-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  • 注解方式

/**
 * 过滤器快速入门
 * */
@WebFilter("/*")
//访问所有servlet之前都会经过这个过滤器
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("MyFilter执行了......");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

Filter过滤器细节

1过滤器生命周期

  • init:在服务器启动后,会创建Filter对象,然后调用Init方法。只执行一次。用于加载资源。

  • doFilter:在每一次请求被拦截资源时,会执行。执行多次。

  • destroy:服务器正常关闭前,被销毁destroy 只执行一次

2过滤器配置讲解

  • 拦截路径的配置

    1:拦截资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行

    2:目录拦截:/user/* 访问/user下的所有资源时,过滤器都会被执行

    3:后缀名拦截:*.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行

    4:拦截所有资源:/* 访问所有资源时,过滤器都会被执行

  • 拦截方式的配置:资源被访问的方式

    1:Request:默认值。浏览器直接请求资源。

    2:FORWARD:转发包含资源

    3:INCLUDE:包含访问资源

    4:ERROR:错误跳转资源

    5:ASYNVC:异步访问资源

3过滤器链(配置多个过滤器)

  • 执行顺序:如果有两个过滤器:过滤器1和过滤器2

    1:过滤器1

    2:过滤器2

    3:资源执行

    4:过滤器2

    5:过滤器1

  • 过滤器先后顺序问题:

    1:注解配置:按照类名和字符串比较规则比较,值小的先执行

    • 如:AFilter和BFilter,AFilter就先执行了。

    2:web.xml配置:<filter-mapping>谁定义在上边,谁先执行

监听器

  • 概念:Web的三大组件之一。

    • 事件监听机制

      • 事件:一件事情

      • 事件源:事件发生的地方

      • 监听器:一个对象

      • 注册监听:将事件,事件源,监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码

  • ServletContextListener:监听ServletContext对象的创建和销毁

    • void contextDestroyed(ServletContextEvent servletContextEvent):ServletContext对象被销毁之前会调用该方法

    • void contextInitialized(ServletContextEvent servletContextEvent):ServletContext对象创建后会调用该方法

监听器使用

步骤:

1:定义一个类,实现ServletContextListener接口

2:复写方法

public class MyContextConfigListener implements ServletContextListener {
    /*
    * 服务器一启动就执行Initial方法 这个方法是整个web最先执行的
    * sce 就是全局对象 servletContext
    * */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
        ServletContext servletContext = sce.getServletContext();
        servletContext.setAttribute("applicationContext",applicationContext);
    }

ServletContext

两种获取方式

ServletContext servletContext = req.getServletContext();

ServletContext servletContext = this.getServletContext();

过滤器 和 拦截器的 6个区别,别再傻傻分不清了_拦截器和过滤器的区别_程序员小富的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值