过滤器和监听器

目录

过滤器

        一、过滤器的概述

        二、作用

        三、过滤器的原理

        四、快速入门

         五、过滤器的细节问题

        监听器

                一、监听器的作用

                三、创建监听器的步骤

        示例1:


过滤器

        一、过滤器的概述

java过滤器能够对目标资源的请求和响应进行过滤/拦截。

javaweb 三大组件:servlet , filter , listener

生活中:净水器,空气净化器。。。

java中:登录验证,字符编码处理,敏感字符过滤等

共性特点:过滤的是每一次的请求和响应,意味着每一次的请求和响应一定要先走过滤器!

        二、作用

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

        三、过滤器的原理

 

        四、快速入门

javaWeb三大组件:servlet (应用程序) , filter (过滤器), listener(监听器)

        3.1 实现接口Filter

        3.2 复写方法      chain.doFilter(req,resp);放行方法

        3.3 配置访问拦截路径

                注解配置

 

                web.xml配置

 <filter>
        <filter-name>Filter</filter-name>
        <filter-class>com.wjk.filter.Filter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Filter</filter-name>
        <url-pattern>/LifeServlet</url-pattern>
 </filter-mapping>

         五、过滤器的细节问题

  1. web.xml的配置

  2. 过滤器的执行流程

    客户端发出请求----》过滤器----》放行-----》请求的资源----》响应----》过滤器----》客户端

  3. 过滤器的生命周期

    同servlet生命周期:

    init():初始化

    doFilter():放行方法

    destroy():销毁方法 当服务器正常关闭时,执行。

  4. 过滤器配置详解

  •         过滤路径配置
  •         具体的资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  •         拦截目录:/user/* 访问user目录下的所有资源时,过滤器会被执行
  •         后缀名拦截:*.jsp / *.do 访问所有后缀名为.jsp .do时,过滤器会被执行
  •         拦截所有资源: /* 访问所有资源时,过滤器都会被执行
  •         过滤方式配置(资源被访问的方式) 了解
  •         注解:设置dispatcherTypes属性
  •         REQUEST:默认值 浏览器直接请求资源
  •         FORWARD:转发访问资源
  •         INCLUDE:包含访问资源
  •         ERROR:错误跳转资源
  •         ASYNC:异步访问资源

        web.xml配置

<filter>
        <filter-name>FilterDemo1</filter-name>
        <filter-class>com.aaa.bai.filter.FilterDemo1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>FilterDemo1</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

        监听器

                一、监听器的作用

        监听你的web应用,监听许多信息的初始化,销毁,增加,修改,删除值等

   Servlet监听器用于监听一些重要事件的发生,监听器对象可以在事情发生前、发生后可以做一些必要的处理

                二、监听器的分类

在一个web应用程序的整个运行周期内,web容器会创建和销毁三个重要的对象,ServletContext,HttpSession,ServletRequest

        按监听的对象划分,可以分为:

                   *ServletContext对象监听器    

                   *HttpSession对象监听器

                   *ServletRequest对象监听器

        按监听的时间划分

                   *对象自身的创建和销毁的监听器

                   *对象中属性的创建和消除的监听器

                   *sessoin中某个对象的状态变化的监听器

                三、创建监听器的步骤

                       注册监听器:

        

<listener>
        <listener-class>com.wjk.listener.Listener</listener-class>
    </listener>

        3.1 上下文监听

@WebListener
public class MyContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
//        获取到上下文对象
        ServletContext application = servletContextEvent.getServletContext();
        System.out.println("上下文初始化"+application);
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        System.out.println("上下文销毁");
    }
}

        3.2 session监听

@WebListener
public class MySessionListener implements HttpSessionListener {
    /**
     *
     * @param httpSessionEvent 事件参数,可以获取到被监听对象的数据信息
     */
    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
        System.out.println("session创建"+httpSessionEvent.getSession().getId());
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        System.out.println("session销毁"+httpSessionEvent.getSession());
    }
}

        3.3 session中属性监听

@WebListener
public class MySessionAttributeListener implements HttpSessionAttributeListener {
    @Override
    public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session属性添加:"+httpSessionBindingEvent.getName());
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session属性移除:"+httpSessionBindingEvent.getName());
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
        System.out.println("session属性替换:"+httpSessionBindingEvent.getName());
    }
}

        示例1:

在线人数统计:

1、先获取容器中的数量计数器,如果没有,创建存进去

2、每创建一个session,计数器加1

3、每销毁一个session,计数器减1

@WebListener
public class OnlineListener implements ServletContextListener, HttpSessionListener {
    ServletContext appliction;
    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {
//        获取上下文对象
         appliction = servletContextEvent.getServletContext();
//         是否有计数器
        if(appliction.getAttribute("count")==null){
//            存进去,只执行一次
            appliction.setAttribute("count",0);
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
    }

    @Override
    public void sessionCreated(HttpSessionEvent httpSessionEvent) {
//        获取原来的计数器的值
       Integer count=Integer.valueOf(appliction.getAttribute("count").toString());
       count++;
//       存进去
       appliction.setAttribute("count",count);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
        Integer count=Integer.valueOf(appliction.getAttribute("count").toString());
        count--;
        appliction.setAttribute("count",count);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Servlet过滤器监听器Java Web开发中的两个重要组件,可以在请求到达Servlet之前或者之后对请求和响应进行拦截、处理和修改,从而实现一些自定义的功能。 下面是Servlet过滤器监听器的配置及应用: 1. 过滤器的配置和应用: (1)在web.xml文件中配置过滤器: ```xml <filter> <filter-name>MyFilter</filter-name> <filter-class>com.example.MyFilter</filter-class> </filter> <filter-mapping> <filter-name>MyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` (2)编写过滤器类: ```java public class MyFilter implements Filter { @Override public void init(FilterConfig config) throws ServletException { // 过滤器初始化代码 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 过滤器逻辑代码 chain.doFilter(request, response); } @Override public void destroy() { // 过滤器销毁代码 } } ``` (3)应用过滤器过滤器可以应用于所有的Servlet请求,或者只应用于特定的URL模式。在上面的配置中,我们将过滤器应用于所有的URL模式。 2. 监听器的配置和应用: (1)在web.xml文件中配置监听器: ```xml <listener> <listener-class>com.example.MyListener</listener-class> </listener> ``` (2)编写监听器类: ```java public class MyListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent event) { // 应用初始化代码 } @Override public void contextDestroyed(ServletContextEvent event) { // 应用销毁代码 } } ``` (3)应用监听器监听器可以监听应用程序的生命周期事件,比如应用程序的初始化、销毁等事件。在上面的配置中,我们将监听器应用于应用程序的初始化和销毁事件。 以上就是Servlet过滤器监听器的配置及应用的基本介绍。它们可以为我们提供很多灵活的机制来扩展和定制我们的Web应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值