• 过滤器和监听器


    目录

    过滤器

            一、过滤器的概述

            二、作用

            三、过滤器的原理

            四、快速入门

             五、过滤器的细节问题

            监听器

                    一、监听器的作用

                    三、创建监听器的步骤

            示例1:


    过滤器

            一、过滤器的概述

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

    javaweb 三大组件:servlet , filter , listener

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

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

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

            二、作用

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

            三、过滤器的原理

     

            四、快速入门

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

            3.1 实现接口Filter

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

            3.3 配置访问拦截路径

                    注解配置

     

                    web.xml配置

    1. <filter>
    2. <filter-name>Filterfilter-name>
    3. <filter-class>com.wjk.filter.Filterfilter-class>
    4. filter>
    5. <filter-mapping>
    6. <filter-name>Filterfilter-name>
    7. <url-pattern>/LifeServleturl-pattern>
    8. 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配置

    1. <filter>
    2. <filter-name>FilterDemo1filter-name>
    3. <filter-class>com.aaa.bai.filter.FilterDemo1filter-class>
    4. filter>
    5. <filter-mapping>
    6. <filter-name>FilterDemo1filter-name>
    7. <url-pattern>/*url-pattern>
    8. <dispatcher>REQUESTdispatcher>
    9. filter-mapping>

            监听器

                    一、监听器的作用

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

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

                    二、监听器的分类

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

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

                       *ServletContext对象监听器    

                       *HttpSession对象监听器

                       *ServletRequest对象监听器

            按监听的时间划分

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

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

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

                    三、创建监听器的步骤

                           注册监听器:

            

    1. <listener>
    2. <listener-class>com.wjk.listener.Listenerlistener-class>
    3. listener>

            3.1 上下文监听

    1. @WebListener
    2. public class MyContextListener implements ServletContextListener {
    3. @Override
    4. public void contextInitialized(ServletContextEvent servletContextEvent) {
    5. // 获取到上下文对象
    6. ServletContext application = servletContextEvent.getServletContext();
    7. System.out.println("上下文初始化"+application);
    8. }
    9. @Override
    10. public void contextDestroyed(ServletContextEvent servletContextEvent) {
    11. System.out.println("上下文销毁");
    12. }
    13. }

            3.2 session监听

    1. @WebListener
    2. public class MySessionListener implements HttpSessionListener {
    3. /**
    4. *
    5. * @param httpSessionEvent 事件参数,可以获取到被监听对象的数据信息
    6. */
    7. @Override
    8. public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    9. System.out.println("session创建"+httpSessionEvent.getSession().getId());
    10. }
    11. @Override
    12. public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    13. System.out.println("session销毁"+httpSessionEvent.getSession());
    14. }
    15. }

            3.3 session中属性监听

    1. @WebListener
    2. public class MySessionAttributeListener implements HttpSessionAttributeListener {
    3. @Override
    4. public void attributeAdded(HttpSessionBindingEvent httpSessionBindingEvent) {
    5. System.out.println("session属性添加:"+httpSessionBindingEvent.getName());
    6. }
    7. @Override
    8. public void attributeRemoved(HttpSessionBindingEvent httpSessionBindingEvent) {
    9. System.out.println("session属性移除:"+httpSessionBindingEvent.getName());
    10. }
    11. @Override
    12. public void attributeReplaced(HttpSessionBindingEvent httpSessionBindingEvent) {
    13. System.out.println("session属性替换:"+httpSessionBindingEvent.getName());
    14. }
    15. }

            示例1:

    在线人数统计:

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

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

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

    1. @WebListener
    2. public class OnlineListener implements ServletContextListener, HttpSessionListener {
    3. ServletContext appliction;
    4. @Override
    5. public void contextInitialized(ServletContextEvent servletContextEvent) {
    6. // 获取上下文对象
    7. appliction = servletContextEvent.getServletContext();
    8. // 是否有计数器
    9. if(appliction.getAttribute("count")==null){
    10. // 存进去,只执行一次
    11. appliction.setAttribute("count",0);
    12. }
    13. }
    14. @Override
    15. public void contextDestroyed(ServletContextEvent servletContextEvent) {
    16. }
    17. @Override
    18. public void sessionCreated(HttpSessionEvent httpSessionEvent) {
    19. // 获取原来的计数器的值
    20. Integer count=Integer.valueOf(appliction.getAttribute("count").toString());
    21. count++;
    22. // 存进去
    23. appliction.setAttribute("count",count);
    24. }
    25. @Override
    26. public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
    27. Integer count=Integer.valueOf(appliction.getAttribute("count").toString());
    28. count--;
    29. appliction.setAttribute("count",count);
    30. }
    31. }
  • 相关阅读:
    C语言逻辑与、或操作符、条件操作符、逗号表达式、下标引用、函数调用、结构体调用操作符
    Day 10:100322. 删除星号以后字典序最小的字符串
    SV-线程的使用与控制
    Nginx+Lua+OpenResty(详解及使用)
    Docker通过Dockerfile创建Redis、Nginx--详细过程
    这几个一键文字转语音的方法你可不能错过
    2022-08-25-RISC-V跃出IoT圈,高性能计算三分天下雏形初现-平头哥先“打样”了SoC原型芯片曳影1520(-JPG)
    C#开发的OpenRA游戏之系统参数选项按钮
    Spring cloud alibaba实战
    「Java」Java面试宝典:全面覆盖常见问题和难点解析
  • 原文地址:https://blog.csdn.net/wk3510/article/details/126695353