我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java过滤器与监听器间区别与联系

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java过滤器与监听器间区别与联系

过滤器

过滤器可以对 Web 服务资源进行过滤,过滤静态资源如静态 HTML、CSS、JS、IMG 等,过滤动态资源如 JSP、Servlet 等,从而实现一些特殊的需求,比如 URL 访问权限设置,过滤敏感词汇,压缩响应信息。

自定义过滤器

定义一个过滤器实现 Filter 接口,重写三个方法

init() :该方法在容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。注意:这个方法必须执行成功,否则过滤器会不起作用。

doFilter() :容器中的每一次请求都会调用该方法, FilterChain 用来调用下一个过滤器 Filter。

destroy(): 当容器销毁 过滤器实例时调用该方法,一般在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次

@Slf4j
public class WebMvcFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        String encoding = filterConfig.getInitParameter("encoding");
        log.info("-1-----encoding: {} ----->", encoding);
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        log.info("0-----doFilter----->");
        filterChain.doFilter(servletRequest, servletResponse);
    }
    @Override
    public void destroy() {
        log.info("5-----destroy----->");
    }
}

定义一个配置类注册过滤器并定义规则。

@Configuration
public class WebFilterConfiguration {
    @Bean
    public FilterRegistrationBean getWebMvcFilter(){
        FilterRegistrationBean<Filter> filterFilterRegistrationBean = new FilterRegistrationBean<>();
        WebMvcFilter webMvcFilter = new WebMvcFilter();
        filterFilterRegistrationBean.setFilter(webMvcFilter);
        filterFilterRegistrationBean.addUrlPatterns("/api/*");
        filterFilterRegistrationBean.setName("WebMvcFilter");
        filterFilterRegistrationBean.addInitParameter("encoding", "GBK");
        filterFilterRegistrationBean.setOrder(1);
        return filterFilterRegistrationBean;
    }
}

拦截器和过滤器的区别

  • 过滤器依赖 Servlet 容器,拦截器不依赖 Servlet 容器。
  • 过滤器基于容器的函数回调,拦截器基于 Java 的反射机制。
  • 过滤器几乎可以过滤所有的请求,包括静态和动态资源。拦截器只能拦截 Controller 层定义的路由请求,不处理静态资源。
  • 过滤器只能在容器初始化的时候调用一次,拦截器可以多次调用。
  • 拦截器可以访问 Controller 层中的方法和上下文,可以获取 IOC 容器中的各种 Bean 并根据需求进行处理。过滤器不支持访问且不能获取。

监听器

  • 监听器可以监听 Web 中特定的事件。
  • 监听器监听的是拥有作用域的对象,如 ServletContext、HttpSession 等。这些作用域对象分别都有相同的方法,如 setAttribute、getAttribute、removeAttribute,只要调用这几个方法就会进入到监听器对应的方法中处理相应的逻辑。
  • 初始化上下文(Spring 容器的初始化,文件的解析)、会话的监听(在线人数),监听干预用户信息(用户资源倾斜)。

监听ServletContext 的 application 对象

@Component
public class ServletContextListener implements ApplicationListener<ContextRefreshedEvent> {
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if (event.getApplicationContext().getParent() == null) {
            ApplicationContext applicationContext = event.getApplicationContext();
            UserService userService = applicationContext.getBean(UserService.class);
            User user = userService.getUser();
            ServletContext application = applicationContext.getBean(ServletContext.class);
            application.setAttribute("user", user);
        }
    }
}

测试

@RestController
@Slf4j
public class UserController {
    @GetMapping("/api/getUser")
    public User getUser(HttpServletRequest request) {
        ServletContext servletContext = request.getServletContext();
        User user = (User) servletContext.getAttribute("user");
        log.info("user: {}", user);
        return user;
    }
}

监听 HttpSession的 session 对象

定义一个监听器实现 HttpSessionListener 接口,重写两个方法,获取 session 会话对象,并将数据放到 HttpSession 的作用域对象 session 中。

@Component
@Slf4j
public class LoginSessionListener implements HttpSessionListener {
    public static Integer count = 0;
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        log.info("新用户上线...");
        count++;
        se.getSession().getServletContext().setAttribute("personCount", count);
    }
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        log.info("用户下线了...");
        count--;
        se.getSession().getServletContext().setAttribute("personCount", count);
    }
}

测试

@RestController
@Slf4j
public class LoginController {
    @GetMapping("/getOnlineUser")
    public String getOnlineUser(HttpServletRequest request) {
        Integer personCount = (Integer) request.getServletContext().getAttribute("personCount");
        log.info("登录的人数是: {}", (personCount == null ? 0 : personCount));
        return "登录的人数是:" + (personCount == null ? 0 : personCount);
    }
    @GetMapping("logined")
    public String logined(HttpSession session) {
        session.setAttribute("user", new User(1L, "PlanMak1r", "123456"));
        log.info("登录成功...");
        return "success";
    }
    @GetMapping("logout")
    public String logout(HttpSession session) {
        session.invalidate();
        log.info("退出成功...");
        return "success";
    }
}

到此这篇关于Java过滤器与监听器间区别与联系的文章就介绍到这了,更多相关Java过滤器与监听器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java过滤器与监听器间区别与联系

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java过滤器与监听器间区别与联系

监听器是一个接口内容由我们实现,会在特定时间被调用,监听器用于监听web应用中三大域对象(request,session,application),信息的创建,销毁,增加,修改,删除等动作的发生,然后做出相应的响应处理
2023-01-30

Java拦截器,过滤器,监听器的简单原理和区别

在Java Web开发中,拦截器(Interceptor)、过滤器(Filter)和监听器(Listener)都是为了实现业务的预处理或后处理。拦截器主要用于在处理Controller方法前后添加特定的处理逻辑;过滤器对请求和响应进行预处理和后处理;监听器用于监听和响应Web应用的某些事件。
Java拦截器,过滤器,监听器的简单原理和区别
2023-10-29

深入理解JavaWeb中过滤器与监听器的应用

这篇文章主要介绍了JavaWeb中过滤器与监听器的应用,过滤器能够对匹配的请求到达目标之前或返回响应之后增加一些处理代码,监听器是一个接口内容由我们实现,会在特定时间被调用,感兴趣想要详细了解可以参考下文
2023-05-20

云服务器与云数据库的区别和联系与区别

云服务器和云数据库是两个常见的云计算服务,它们之间有一些区别和联系。云计算是一种按需使用的基础设施服务,它通常使用虚拟机、服务器和存储设备来实现。云计算服务按需提供,企业可以按照需求来选择所需的计算、存储和网络服务,而不需要自己构建基础设施系统。云服务器是云计算服务提供商为客户提供的云主机,它们通常提供高性能计算和存储服务。云服务器的主要功能包括数据存储、容错、负载均衡和弹性扩容等。云服务器
2023-10-26

云服务器与虚拟主机的区别和联系与区别

云服务器与虚拟主机是两个不同的概念,它们的区别和联系如下:存储空间:云服务器通常提供大量的可用空间,用户不需要使用物理服务器提供的存储空间。相反,云服务器可以向用户提供高容量的存储空间,用于存储应用程序或数据。可扩展性:云服务器通常提供可伸缩的架构,允许服务器的数量随着业务需求的增加而动态增长。这有助于降低成本,并增加灵活性和可用性。性能:使用云服务器进行虚拟化可以使服务器的性能得
2023-10-26

微软与亚马逊云服务器的区别和联系与区别

微软的Azure是一款基于云的平台,可以让开发人员在云上运行各种应用程序和服务。Azure具有高度的灵活性和可扩展性,可以适应各种不同的业务需求,例如开发、测试、运营和数据分析等。而亚马逊的AWS(AmazonWebServices)是一款基于云的平台,可以为企业提供强大的计算和存储能力,包括数据库、分析工具、存储、消息服务、安全性、容器服务等。AWS也提供了一系列的服务,例如数据分析、机器学习、Web应用程序、托管服务、...
2023-10-27

Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系解析

在我们日常的开发中,我们经常会用到Filter和Interceptor,这篇文章主要介绍了Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系 ,需要的朋友可以参考下
2022-11-13

云服务器与云数据库的区别和联系与区别是什么

云服务器(CloudStorage,CDN)与云数据库(CloudDatabase,CDB)是互联网云服务中的两种常见云服务形式。以下是云服务器与云数据库的主要区别和联系:存储:云服务器存储的数据主要是以云主机的形式存储的,而云数据库存储的是数据本地化,需要使用云端的数据管理和分析工具。数据管理:云服务器使用云主机的存储管理功能来管理数据,如文件系统、数据库、备份等;云数据库使用数据分区的存储管理功能来管理本地数据的存储和管理。数...
2023-10-27

云服务器与虚拟主机的区别和联系与区别是什么

1.云服务器和虚拟主机的定义1.1云服务器云服务器是一种基于云计算技术的虚拟服务器,它可以在云平台上创建和管理。云服务器可以提供更高的可靠性、可扩展性和安全性,同时还可以根据需要进行弹性扩容和缩容。1.2虚拟主机虚拟主机是一种基于共享服务器的虚拟主机,它可以通过虚拟化技术将一台物理服务器分割成多个虚拟服务器,每个虚拟服务器都可以独立运行一个网站或应用程序。2.云服务器和虚拟主机的区别
2023-10-26

云服务器与虚拟主机的区别和联系与区别有哪些

1.云服务器和虚拟主机的定义1.1云服务器云服务器是一种基于云计算技术的虚拟服务器,它可以在云平台上创建和管理。云服务器可以提供更高的可靠性、可扩展性和安全性,同时还可以根据需要进行弹性扩容和缩容。1.2虚拟主机虚拟主机是一种基于共享服务器的虚拟主机,它可以通过虚拟化技术将一台物理服务器分割成多个虚拟服务器,每个虚拟服务器都可以独立运行一个网站或应用程序。2.云服务器和虚拟主机的区别
2023-10-26

云服务器和数据库的区别和联系与区别

云服务器和数据库都是用来存储和处理数据的系统,但它们的区别是很大的。云服务器是一种虚拟服务器,它的功能是让客户机或者用户可以连接到服务器进行数据访问。而数据库则是一个存储着数据的系统,它的作用是用来管理和维护数据,以便于在需要的时候可以从这些数据中提取出有用的信息来支持业务。云服务器可以使用虚拟化技术来提高效率,例如使用云计算平台来减少硬件成本和管理负担。云服务器还可以提供更快的数据访问速度和
2023-10-26

虚拟服务器云服务器的区别与联系

虚拟服务器云服务器是指通过虚拟化技术,将服务器、存储、网络等资源虚拟化为云端提供服务的一种云计算平台,它是云计算服务中最为普及的形式之一。以下是它们的区别与联系:资源利用率不同:虚拟服务器云服务器将计算资源和存储资源虚拟化为云计算服务,可以更有效地利用服务器资源进行计算和存储,提高云服务器资源利用率,减少服务器的闲置时间,从而减少资源浪费。成本不同:与传统的服务器相比,虚拟服务器云计算平台
2023-10-26

云服务器基础运维与管理的区别与联系

云服务器基础运维与管理的区别:工作内容不同:云服务器基础运维主要负责数据库、操作系统、网络等运维工作,而管理则需要更专业和更深入的管理技能,比如数据备份、网络安全、服务监控等。管理职责不同:云服务器基础运维负责运维基础设施,如主机、存储等,而管理则更多地涉及到系统运营和服务质量等方面,需要具备系统管理、性能监控、故障处理等技能。工作方式不同:云服务器基础运维工作包括日常巡检、监控、故障处理等日常运营工作,而...
2023-10-27

简述虚拟主机与云服务器的区别与联系

区别:1.技术原理不同:虚拟主机是基于Web服务器的一种软件,使用者通过配置Web服务器的IP地址和其他配置文件来管理和运行应用程序。而云服务器则是一种基于云计算平台的服务器架构,通过云计算技术来提供虚拟化的资源供用户使用。2.可用资源不同:虚拟主机通常需要管理大量的服务器资源,包括CPU、内存、存储等,这些资源的可用性和性能通常受到技术架构和服务器硬件配置的限制。而云服务器则可以根据用户的需求动态分配服...
2023-10-27

云服务器和虚拟主机的区别和联系与区别

云服务器和虚拟主机是两个常用的网站托管平台,它们都提供了虚拟化技术来支持企业或个人将数据存储在公共云中。这两个平台都包括了服务器、存储、网络和其他资源,以提供灵活、安全和可靠的基础设施。云服务器提供了虚拟化的基础设施,允许企业或个人将服务器、存储和其他资源存储在其自身的资源池中,无需购买或租用其他资源。这样,企业或个人可以根据自身需求来配置和管理这些资源,提高了灵活性和效率。另一个区别是云计
2023-10-26

Swoole和Workerman的消息过滤和监听器在PHP与MySQL中的应用场景

在现代的Web开发中,实时消息推送已经成为了一个基本的需求。为了满足这个需求,开发人员使用了各种各样的技术和工具。在PHP开发中,Swoole和Workerman是两个非常受欢迎的框架,它们提供了高性能的网络通信能力和事件驱动的编程模型。在
2023-10-21

云服务器与虚拟主机的区别和联系

云服务器和虚拟主机是两个常见的网络服务器托管平台,它们都提供了高可用性、网络访问控制、虚拟服务器等优点,但它们在使用上存在以下区别和联系:可用性:云服务器和虚拟主机都能够提供可用性保障,但它们的可用性是不同的。一般来说,云服务器具有更高的稳定性和更强的性能。速度:云服务器和虚拟主机在速度方面有很大的不同。一般来说,云服务器可以提供更快的网络访问速度,同时减少了网络延迟,从而使用户可以更快地
2023-10-26

弹性云服务器和裸金属服务器的区别和联系与区别

弹性云服务器和裸金属服务器是两种不同类型的服务器,它们之间的区别和联系如下:存储和处理数据的方式不同:弹性云服务器通常包含一组存储和处理服务器资源,如文件系统、数据库等,可以根据需要快速扩展和缩小资源,以提高性能和可靠性。同时,这些服务器也通常具有较少的硬件需求,因为其自带的内存和存储器可以用于快速读写数据,而不需要更多的硬件。裸金属服务器则通常采用共享存储、分布式文件系统等技术来存储和处理
2023-10-26

云服务器与云数据库的区别和联系

云服务器(CloudStorage,也称为云数据库)和云数据库都是云计算中的两种类型,它们都是基于服务器的存储和计算方式提供数据访问的。虽然它们具有很多相同之处,但它们在一些方面是不同的。云服务器是一种服务器,通常由虚拟化技术提供支持,可以在多个操作系统、硬件或软件环境中运行,可以提供高可靠性、快速恢复、弹性伸缩等特性。云服务器提供了一种更加灵活和动态的方式来部署和管理数据,而不必担心使用和维
2023-10-26

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录