Java-servlet(完结篇)过滤器乱码解决与监听器

06-02 1060阅读

Java-servlet(完结篇)过滤器乱码解决与监听器

  • 前言
  • 一、过滤器乱码解决
  • 二、监听器
    • 1. HttpSessionListener
    • 2. ServletContextListener
    • 3. ServletRequestListener
    • 三、监听器的使用场景
    • Java-servlet 结语

      前言

      • 在之前的 Java Servlet 学习中,我们已经熟悉了 Servlet 的基础配置、生命周期、请求响应处理,以及 Java Servlet 环境的配置,还学习了过滤器、请求调度程序和 Servlet 线程等知识。
      • 今天,我们继续深入探讨过滤器和监听器,这两个在 Java Web 开发中极为重要的部分。

        我的个人主页,欢迎来阅读我的其他文章

        https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

        我的Java-servlet文章专栏

        欢迎来阅读指出不足

        https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482


        一、过滤器乱码解决

        • 在Web开发里,乱码问题常常让人头疼。
        • 不过,利用过滤器能有效解决这个问题。下面是一段解决乱码问题的过滤器代码:
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              System.out.println("执行了过滤器-FilterDemo3");
              // 先让请求通过过滤器链,处理后续的过滤器或目标资源
              filterChain.doFilter(servletRequest, servletResponse);
              // 设置响应内容类型为HTML,字符编码为UTF-8
              servletResponse.setContentType("text/html;charset=utf-8");
              // 将ServletRequest强转为HttpServletRequest,方便后续操作
              HttpServletRequest request = (HttpServletRequest) servletRequest;
              // 再次通过过滤器链,保证请求和响应都得到完整处理
              filterChain.doFilter(servletRequest, servletResponse);
          }
          
          • 这段代码的过滤器,先让请求在过滤器链中传递,然后设置响应编码为UTF - 8,避免响应内容出现乱码。
          • 同时,再次调用过滤器链,确保整个请求和响应过程的完整性。

            二、监听器

            • 监听器是Servlet规范里的重要组件,能监听Web应用中的各种事件,并在事件发生时执行相应操作。
            • 监听器有23种模式,下面介绍几种常用的监听器。

              1. HttpSessionListener

              用于监听HttpSession的创建和销毁事件。代码示例如下:

              package javax.servlet.http;
              import java.util.EventListener;
              // HttpSessionListener继承自EventListener
              public interface HttpSessionListener extends EventListener {
                  // 当HttpSession创建时调用此方法
                  void sessionCreated(HttpSessionEvent var1);
                  // 当HttpSession销毁时调用此方法
                  void sessionDestroyed(HttpSessionEvent var1);
              }
              

              使用时,要在web.xml文件中注册监听器:

                  listener.MySessionListener
              
              

              然后实现自定义的监听器类MySessionListener:

              package listener;
              import javax.servlet.http.HttpSession;
              import javax.servlet.http.HttpSessionBindingEvent;
              import javax.servlet.http.HttpSessionEvent;
              import javax.servlet.http.HttpSessionListener;
              public class MySessionListener implements HttpSessionListener {
                  // 当HttpSession创建时,打印日志
                  @Override
                  public void sessionCreated(HttpSessionEvent se) {
                      System.out.println("session Created");
                  }
                  // 当HttpSession销毁时,打印日志
                  @Override
                  public void sessionDestroyed(HttpSessionEvent se) {
                      System.out.println("session Destroyed");
                  }
                  // 这里额外重写一个处理属性添加的方法,虽然接口未定义,但可按需添加处理逻辑
                  @Override
                  public void attributeAdded(HttpSessionBindingEvent se) {
                      System.out.println("attribute added");
                  }
              }
              

              2. ServletContextListener

              用于监听ServletContext的创建和销毁事件

              • ServletContext代表整个Web应用的上下文,通过它可以获取Web应用的初始化参数、共享资源等。示例代码如下:
                package javax.servlet;
                import java.util.EventListener;
                public interface ServletContextListener extends EventListener {
                    // 当ServletContext创建时调用此方法
                    void contextInitialized(ServletContextEvent sce);
                    // 当ServletContext销毁时调用此方法
                    void contextDestroyed(ServletContextEvent sce);
                }
                

                在web.xml中注册:

                    listener.MyServletContextListener
                
                

                实现自定义的监听器类:

                package listener;
                import javax.servlet.ServletContextEvent;
                import javax.servlet.ServletContextListener;
                public class MyServletContextListener implements ServletContextListener {
                    @Override
                    public void contextInitialized(ServletContextEvent sce) {
                        // 在Web应用启动时执行的操作,比如初始化数据库连接池
                        System.out.println("ServletContext初始化了");
                    }
                    @Override
                    public void contextDestroyed(ServletContextEvent sce) {
                        // 在Web应用关闭时执行的操作,比如关闭数据库连接池
                        System.out.println("ServletContext销毁了");
                    }
                }
                

                3. ServletRequestListener

                用于监听ServletRequest的创建和销毁事件。

                • ServletRequest代表客户端的一次请求,通过监听它的生命周期,可以在请求处理前后进行一些通用操作。示例代码如下:
                  package javax.servlet;
                  import java.util.EventListener;
                  public interface ServletRequestListener extends EventListener {
                      // 当ServletRequest创建时调用此方法
                      void requestInitialized(ServletRequestEvent sre);
                      // 当ServletRequest销毁时调用此方法
                      void requestDestroyed(ServletRequestEvent sre);
                  }
                  

                  在web.xml中注册:

                      listener.MyServletRequestListener
                  
                  

                  实现自定义的监听器类:

                  package listener;
                  import javax.servlet.ServletRequestEvent;
                  import javax.servlet.ServletRequestListener;
                  public class MyServletRequestListener implements ServletRequestListener {
                      @Override
                      public void requestInitialized(ServletRequestEvent sre) {
                          // 在请求开始处理时执行的操作,比如记录请求开始时间
                          System.out.println("请求开始处理");
                      }
                      @Override
                      public void requestDestroyed(ServletRequestEvent sre) {
                          // 在请求处理结束时执行的操作,比如记录请求处理时间
                          System.out.println("请求处理结束");
                      }
                  }
                  

                  三、监听器的使用场景

                  1. 统计在线用户数量:利用HttpSessionListener,在sessionCreated方法中让在线用户数加1,在sessionDestroyed方法中减1,从而实时统计在线用户数量。
                  2. 记录用户登录和退出时间:在HttpSession创建时记录登录时间,销毁时记录退出时间,便于分析用户行为。
                  3. 资源初始化和销毁:借助ServletContextListener,在Web应用启动时初始化全局资源,如数据库连接池;在应用关闭时释放资源,确保资源管理得当。
                  4. 请求日志记录:通过ServletRequestListener,在请求开始和结束时记录日志,方便排查问题和监控系统运行状态。

                  Java-servlet 结语

                  • 至此,Java Servlet 的入门讲解暂告一段落。通过这部分内容,我们已经搭建起 Web 开发的基础框架,理解了服务端与客户端交互的核心逻辑。

                    接下来,我们将深入探讨 JSP(Java 服务器页面) 与 MySQL 数据库 的核心知识。

                    • JSP 作为 Servlet 的延伸,能更便捷地实现动态页面渲染。

                    • 而 MySQL 则是企业级应用中最常用的关系型数据库之一。

                    • 三者结合(Servlet 处理请求逻辑、JSP 构建动态视图、MySQL 存储数据),将形成一套完整的 Web 后端开发体系——这正是支撑现代 Web 项目的“三板斧”。

                      掌握这三项核心技术,不仅能为前端开发提供坚实的后端支持,更能让你在构建完整 Web 应用时游刃有余。无论是小型项目的快速落地,还是大型系统的架构设计,它们都是不可或缺的基石。

                      后续课程中,我们将通过实战案例串联知识,帮助大家更好地理解和应用。

                      • 期待与你继续探索,一起夯实 Web 开发的核心能力!

                        Java-servlet(完结篇)过滤器乱码解决与监听器

                        Java-servlet(完结篇)过滤器乱码解决与监听器


                        以上就是这篇博客的全部内容,接下来的博客里我们将陆续探索JSP与MySQL的更多精彩内容。

                        我的个人主页,欢迎来阅读我的其他文章

                        https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343

                        我的Java-servlet文章专栏

                        欢迎来阅读指出不足

                        https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

                        非常感谢您的阅读,喜欢的话记得三连哦

                        Java-servlet(完结篇)过滤器乱码解决与监听器

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码