• (过滤器)Filter和(监听器)listener


    过滤器 Filter

    Filter是什么?

    • JavaWeb的一个重要组件,可以对发送到servlet的请求进行拦截过滤,也可以对响应进行拦截

    • Filter是实现了Filter接口的Java类

    • Filter需要在web.xml中进行注册,也可以通过注解来注册。

    如何创建一个Filter—只需要创建一个类,实现Filter接口即可。

    字符集的过滤器

    1. package afternoon.filter;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebServlet;
    4. import javax.servlet.http.HttpServletResponse;
    5. import java.io.IOException;
    6. /*
    7.    字符编码集的过滤器
    8.    过滤拦截什么请求?
    9. */
    10. @WebServlet
    11. public class EncodingFilter implements Filter {
    12.    @Override
    13.    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    14.        HttpServletResponse response = (HttpServletResponse) servletResponse;
    15.        servletRequest.setCharacterEncoding("utf-8");
    16.        servletResponse.setCharacterEncoding("utf-8");
    17.        //放行
    18.        filterChain.doFilter(servletRequest, servletResponse);
    19.        
    20.        /*
    21.            给response添加响应头,text/html,后台向前台输出字符串的时候
    22.            当后台向前台输出的是json串的格式时,不需要设置这个。
    23.         */
    24.        response.addHeader("content-type","text/html;charset=utf-8");
    25.   }
    26. }

    监听器 listener

    专门用于对其他对象身上发生的事件或状态改变进行监听和响应的处理

    主要监听作用域的对象的改变

    监听器监听的是域对象,不是监听对象的某个地址

    JavaEE(servlet)三大件

    servlet、filter、listener

    监听器的分类

    • 监听域对象自身的创建和销毁

    1. package afternoon.listener;
    2. import javax.servlet.ServletContextEvent;
    3. import javax.servlet.ServletContextListener;
    4. import javax.servlet.ServletRequestEvent;
    5. import javax.servlet.ServletRequestListener;
    6. import javax.servlet.http.HttpSessionEvent;
    7. import javax.servlet.http.HttpSessionListener;
    8. /*
    9. 监听域对象自身的创建和销毁
    10. */
    11. public class HelloListener implements HttpSessionListener, ServletRequestListener, ServletContextListener {
    12. @Override
    13. public void contextInitialized(ServletContextEvent sce) {
    14. ServletContextListener.super.contextInitialized(sce);
    15. }
    16. @Override
    17. public void contextDestroyed(ServletContextEvent sce) {
    18. ServletContextListener.super.contextDestroyed(sce);
    19. }
    20. @Override
    21. public void requestDestroyed(ServletRequestEvent sre) {
    22. ServletRequestListener.super.requestDestroyed(sre);
    23. }
    24. @Override
    25. public void requestInitialized(ServletRequestEvent sre) {
    26. ServletRequestListener.super.requestInitialized(sre);
    27. }
    28. @Override
    29. public void sessionCreated(HttpSessionEvent se) {
    30. HttpSessionListener.super.sessionCreated(se);
    31. }
    32. @Override
    33. public void sessionDestroyed(HttpSessionEvent se) {
    34. HttpSessionListener.super.sessionDestroyed(se);
    35. }
    36. }
    • 监听域对象中属性的增加和删除

    1. package afternoon.listener;
    2. import javax.servlet.ServletContextAttributeEvent;
    3. import javax.servlet.ServletContextAttributeListener;
    4. import javax.servlet.ServletRequestAttributeEvent;
    5. import javax.servlet.ServletRequestAttributeListener;
    6. import javax.servlet.annotation.WebListener;
    7. import javax.servlet.http.HttpSessionAttributeListener;
    8. import javax.servlet.http.HttpSessionBindingEvent;
    9. /*
    10.    监听域对象中属性的增加和删除
    11. */
    12. @WebListener
    13. public class HelloAttributeListener implements ServletContextAttributeListener, ServletRequestAttributeListener, HttpSessionAttributeListener {
    14.    @Override
    15.    public void attributeAdded(ServletContextAttributeEvent scae) {
    16.        ServletContextAttributeListener.super.attributeAdded(scae);
    17.   }
    18.    @Override
    19.    public void attributeRemoved(ServletContextAttributeEvent scae) {
    20.        ServletContextAttributeListener.super.attributeRemoved(scae);
    21.   }
    22.    @Override
    23.    public void attributeReplaced(ServletContextAttributeEvent scae) {
    24.        ServletContextAttributeListener.super.attributeReplaced(scae);
    25.   }
    26.    @Override
    27.    public void attributeAdded(ServletRequestAttributeEvent srae) {
    28.        ServletRequestAttributeListener.super.attributeAdded(srae);
    29.   }
    30.    @Override
    31.    public void attributeRemoved(ServletRequestAttributeEvent srae) {
    32.        ServletRequestAttributeListener.super.attributeRemoved(srae);
    33.   }
    34.    @Override
    35.    public void attributeReplaced(ServletRequestAttributeEvent srae) {
    36.        ServletRequestAttributeListener.super.attributeReplaced(srae);
    37.   }
    38.    @Override
    39.    public void attributeAdded(HttpSessionBindingEvent se) {
    40.        HttpSessionAttributeListener.super.attributeAdded(se);
    41.   }
    42.    @Override
    43.    public void attributeRemoved(HttpSessionBindingEvent se) {
    44.        HttpSessionAttributeListener.super.attributeRemoved(se);
    45.   }
    46.    @Override
    47.    public void attributeReplaced(HttpSessionBindingEvent se) {
    48.        HttpSessionAttributeListener.super.attributeReplaced(se);
    49.   }
    50. }
    • 监听绑定到session中的某个对象的状态的事件监听

    1. package afternoon.listener;
    2. import javax.servlet.http.HttpSessionActivationListener;
    3. import javax.servlet.http.HttpSessionEvent;
    4. /*
    5. 监听绑定到session中的某个对象的状态的事件监听
    6. */
    7. public class HelloSessionListener implements HttpSessionActivationListener {
    8. //在钝化之前被调用
    9. @Override
    10. public void sessionWillPassivate(HttpSessionEvent se) {
    11. HttpSessionActivationListener.super.sessionWillPassivate(se);
    12. }
    13. //在活化之后被调用
    14. @Override
    15. public void sessionDidActivate(HttpSessionEvent se) {
    16. HttpSessionActivationListener.super.sessionDidActivate(se);
    17. }
    18. /*
    19. 活化:从磁盘中读取session对象
    20. 钝化:向磁盘中写入session对象
    21. */
    22. }

    活化:从磁盘中读取session对象

    钝化:向磁盘中写入session对象

    @WebListener注解加上以后才可以监听域对象

    配置监听器

    • 注解

    @WebListener
    • XML配置

    1. <listener>
    2. <listener-class>afternoon.listener.HelloListener</listener-class>
    3. </listener>
  • 相关阅读:
    mkdir-创建目录文件
    day10每日3题(1):逐步求和得到正数的最小值
    【MySQL】数据库的操作
    【chatglm3】(4):如何设计一个知识库问答系统,参考智谱AI的知识库系统,
    详谈 MySQL 8.0 原子 DDL 原理
    【算法4.2】约数(完结)
    1678、设计Goal解析器(暴力+栈+replace)
    java部署教程
    Dockerfile 究极打包 Centos7+python3.10.6
    python 断言
  • 原文地址:https://blog.csdn.net/Dshuai7191/article/details/126669877