首页 > 其他分享 >web 中过滤器和监听器

web 中过滤器和监听器

时间:2024-05-08 10:47:07浏览次数:33  
标签:web public 监听器 过滤器 import servlet javax

  1. MVC模型

    MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

    • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
    • View(视图) - 视图代表模型包含的数据的可视化。
    • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
  2. 实现


    创建一个 Student 对象。
    StudentView 是一个把学生详细信息输出到控制台的视图类
    StudentController 是负责存储数据到 Student 对象中的控制器类,并相应地更新视图 StudentView。

  3. 过滤器

    在Web中的过滤器,对请求进行过滤,通过使用过滤器,可以对请求进行拦截,然后做相应的处理,实现许多特殊功能。

    • 身份验证和授权: 检查用户是否已登录,是否有权限访问某些资源。
    • 日志记录: 记录请求和响应的相关信息,用于调试和分析。
    • 字符编码处理: 对请求和响应进行字符编码的转换。
    • 性能监控: 统计请求的处理时间,检测潜在的性能问题。

    过滤器的生命周期:

    • init(FilterConfig config): 用于进行过滤器的初始化工作,在容器启动时被调用。
    • doFilter(ServletRequest request, ServletResponse response, FilterChain chain): 执行过滤操作的核心方法,可以在此方法中对请求和响应进行处理,并将请求传递给下一个过滤器(或Servlet)。
    • destroy(): 在容器关闭时被调用,用于执行一些资源释放的操作

    过滤器的实现:

      import javax.servlet.Filter;
      import javax.servlet.FilterChain;
      import javax.servlet.FilterConfig;
      import javax.servlet.ServletException;
      import javax.servlet.ServletRequest;
      import javax.servlet.ServletResponse;
      import java.io.IOException;
    
      public class MyFilter implements Filter {
          //注意是servlet中的Filter接口
    
          @Override
          public void init(FilterConfig filterConfig) throws ServletException {
              // 初始化操作,可获取配置信息
          }
    
          @Override
          public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                  throws IOException, ServletException {
              // 在请求处理之前执行的逻辑
              System.out.println("Before Request Processing in Filter");
    
              // 执行下一个过滤器(如果有),或者到达Servlet
              chain.doFilter(request, response);//放行
    
              // 在请求处理之后执行的逻辑
              System.out.println("After Request Processing in Filter");
          }
    
          @Override
          public void destroy() {
              // 资源释放操作
          }
      }
    
      //通过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> 
    
    
  4. 监听器

    什么是监听器:

    是一个实现了特定接口的Java类,用来监听另一个 Java类的方法调用或者属性的改变,当被监听对象发生了上述事件后,监听器某个方法将会立即被执行。

    Servlet 中监听器的分类:

    • 监听三个域对象的创建和销毁的监听器(三个);
    • 监听三个域对象的属性变更(属性添加、移除、替换)的监听器(三个);
    • 监听HttpSession中JavaBean的状态改变(钝化、活化、绑定、解除绑定)的监听器(两个);

    举例:监听HttpSession域对象的创建和销毁

      package com.test.listener;
    
      import javax.servlet.http.HttpSessionEvent;
      import javax.servlet.http.HttpSessionListener;
    
      public class MyHttpSessionListener implements HttpSessionListener {
    
          @Override
          public void sessionCreated(HttpSessionEvent se) {
              System.out.println( se.getSession() + "创建了!!");
          }
    
          @Override
          public void sessionDestroyed(HttpSessionEvent se) {
              System.out.println("session销毁了!!");
          }
      }
      //在web.xml文件中注册监听器:
      <!--注册针对HttpSession对象进行监听的监听器-->
         <listener>
            <listener-class>com.test.listener.MyHttpSessionListener</listener-class>
        </listener>
        <!-- 配置HttpSession对象的销毁时机 -->
        <session-config>
            <!--配置HttpSession对象的1分钟之后销毁 -->
            <session-timeout>1</session-timeout>
        </session-config>
    
  5. 用户登录后才能进入主页的案例

    思路: 从session中取登录后存到其中的值,能取到说明登陆过,放行到主页面,娶不到则说明没登录过跳转到错误页面。

    
      //创建常量类:
    
      package com.test.util;
       
      public class Constant {
          public final static String USER_SESSION="user_session";
    
      //创建过滤器:
    
      package com.test.filter;
       
      import com.test.util.Constant;
       
      import javax.servlet.*;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
       
      public class LoginFilter implements Filter {
          @Override
          public void init(FilterConfig filterConfig) throws ServletException {
       
          }
       
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              //ServletRequest  HttpServletRequest
              HttpServletRequest request=(HttpServletRequest) servletRequest;
              HttpServletResponse response=(HttpServletResponse) servletResponse;
       
              if(request.getSession().getAttribute(Constant.USER_SESSION)==null){
                  response.sendRedirect("/error/login-error.jsp");
              }
       
              filterChain.doFilter(request,response);//继续走业务逻辑
          }
       
          @Override
          public void destroy() {
       
          }
      }
      //配置web.xml
      <servlet>
          <servlet-name>LoginServlet</servlet-name>
          <servlet-class>com.test.servlet.LoginServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>LoginServlet</servlet-name>
          <url-pattern>/user/*</url-pattern>
      </servlet-mapping>
    
      <filter>
          <filter-name>LoginFilter</filter-name>
          <filter-class>com.test.filter.LoginFilter</filter-class>
      </filter>
      <filter-mapping>
          <filter-name>LoginFilter</filter-name>
          <url-pattern>/user/*</url-pattern>
      </filter-mapping>
    
      //登录页测试
      package com.test.servlet;
       
      import com.test.util.Constant;
       
      import javax.servlet.ServletException;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
       
      public class LoginServlet extends HttpServlet {
          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
              //获取前端请求的参数
              String username=req.getParameter("username");
       
              if(username.equals("admin")){//登录成功
                  req.getSession().setAttribute(Constant.USER_SESSION,req.getSession().getId());
                  resp.sendRedirect("/success.jsp");
              }else{//登录失败
                  resp.sendRedirect("/error/login-error.jsp");
              }
          }
       
          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       
          }
      }
    

标签:web,public,监听器,过滤器,import,servlet,javax
From: https://www.cnblogs.com/hytip/p/18179182

相关文章

  • 3D 可视化:18 个 WebGL 框架和 Web3D 图形库
    3D可视化:18个WebGL框架和Web3D图形库作者:2D3D前端可视化开发2023-02-10湖南本文字数:2904字阅读完需:约10分钟WebGL是基于OpenGL的JavaScriptAPI库,允许Web浏览器在浏览器中渲染3D/2D图形,而无需安装额外的插件、桌面应用程序。WebGL允许......
  • Stable Diffusion webui.sh(Version: v1.9.3)选项翻译
    补充解释:Linux/iOS的目录==Windows文件夹options选项:-h,--help显示帮助信息并退出程序 showthishelpmessageandexit--update-all-extensions在启动时更新所有扩展插件 (此为launch.py脚本的参数,下同)launch.pyargument:downloadupdatesforallextensi......
  • .net 8中使用过滤器记录系统日志 ActionFilter+Serilog
    1、添加自定义日志过滤器类usingSerilog;usingMicrosoft.AspNetCore.Mvc.Filters;namespaceADTO.CMS.Common.Filter{///<summary>///日志记录过滤器///</summary>publicclassLogActionFilter:IActionFilter{///<summary>///......
  • 【hvv训练】应急响应靶机训练-Web2
    前言应急响应靶机训练,为保证每位安服仔都有上手的机会,不做理论学家,增加动手经验,可前来挑战应急响应靶机-web1,此系列后期会长期更新,关注本公众号,被动学习。隔日会发题解,请大家务必关注我们。挑战内容前景需要:小李在某单位驻场值守,深夜12点,甲方已经回家了,小李刚偷偷摸鱼后,发现......
  • [hvv训练]应急响应靶机训练-Web3
    前言应急响应靶机训练,为保证每位安服仔都有上手的机会,不做理论学家,增加动手经验,可前来挑战应急响应靶机-web3,此系列后期会长期更新,关注本公众号,被动学习。隔日会发题解,请大家务必关注我们。挑战内容前景需要:小苕在省护值守中,在灵机一动情况下把设备停掉了,甲方问:为什么要停设......
  • flexx:创建交互式的 Web 页面
    Github地址:https://github.com/flexxui/flexxClicktheimagebelowforaninteractiveexample:[Flexx是一个强大的Python库,用于创建交互式的Web应用程序和用户界面。它提供了灵活的组件和布局管理器,使开发者可以轻松构建具有丰富交互性和动态性的应用。本文将详细介绍......
  • python利用stable-diffusion-webui画图
    官网https://github.com/AUTOMATIC1111/stable-diffusion-webui免python版本https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.0.0-pre先把源码,克隆到本地,conda创建一个虚拟环境gitclonehttps://github.com/AUTOMATIC1111/stable-diffusion-webui......
  • Burp Suite Professional 2024.4 (macOS, Linux, Windows) - Web 应用安全、测试和扫
    BurpSuiteProfessional2024.4(macOS,Linux,Windows)-Web应用安全、测试和扫描BurpSuiteProfessional,Test,find,andexploitvulnerabilities.请访问原文链接:BurpSuiteProfessional2024.4(macOS,Linux,Windows)-Web应用安全、测试和扫描,查看最新版。原创......
  • Burp Suite Professional 2024.4 for Windows x64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.4forWindowsx64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:BurpSuiteProfessional2024.4forWindowsx64-领先的Web渗透测试软件,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgBurpSuite......
  • Burp Suite Professional 2024.4 for macOS x64 & ARM64 - 领先的 Web 渗透测试软件
    BurpSuiteProfessional2024.4formacOSx64&ARM64-领先的Web渗透测试软件世界排名第一的Web渗透测试工具包请访问原文链接:BurpSuiteProfessional2024.4formacOSx64&ARM64-领先的Web渗透测试软件,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org......