极速掌握Spring Boot整合Servlet三大组件

这篇具有很好参考价值的文章主要介绍了极速掌握Spring Boot整合Servlet三大组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一. Servlet三大组件

不知道各位小伙伴,是否还记得Servlet、Filter、Listener三大组件的知识点?如果你忘记了,赶紧翻开你的小本本复习回顾一下吧。今天袁老师会给大家介绍如何在Spring Boot中整合Servlet三大组件,快来看看吧。

我们在进行Servlet开发时,通常首先自定义Servlet、Filter、Listener三大组件,然后在文件web.xm中进行配置。而Spring Boot使用的是内嵌式Servlet容器,并没有提供外部配置文件web.xml,那么Spring Boot又该如何整合Servlet的相关组件呢?其实Spring Boot给我们提供了组件注册和路径扫描两种方式,来整合Servlet三大组件。

在Spring Boot中,当我们使用组件注册方式整合内嵌Servlet容器的Servlet、Filter、Listener三大组件时,只需将这些自定义组件通过ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean类注册到容器中即可。
接下来我们就来看看具体的代码实现吧。

二. 组件注册方式整合Servlet

1.创建自定义Servlet类

在chapter05项目中的com.cy.servletComponent包中,我们创建一个继承了HttpServlet的类MySevlet。
package com.cy.servletComponent;
import org.springframework.stereotype.Component;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

​
/** 自定义Servlet类 */
@Component
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.getWriter().write("Hello MyServlet");
}

}

2. 创建Servlet组件配置类

在项目com.cy.config包中,我们可以创建一个Servlet组件配置类ServletConfig,用来对Servlet相关组件进行注册。
package com.cy.config;
import com.cy.servletComponent.MyServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/** 嵌入式Servlet容器三大组件配置 /
@Configuration
public class ServletConfig {
/* 注册Servlet组件 */
@Bean
public ServletRegistrationBean getServlet(MyServlet myServlet) {
ServletRegistrationBean registrationBean = new ServletRegistrationBean(myServlet, "/myServlet");
return registrationBean;
}
}

3. 启动项目进行测试

项目启动成功后,在浏览器上访问http://localhost:8080/myServlet查看数据显示。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

三. 使用组件注册方式整合Filter

1.创建自定义Filter类 

我们可以在com.cy.servletComponent包下创建一个类MyFilter。
package com.cy.servletComponent;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import java.io.IOException;

/** 自定义Filter类 */
@Component
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    System.out.println("Hello Filter");
    filterChain.doFilter(servletRequest, servletResponse);
}

@Override
public void destroy() {
}

}

2. 向Servlet组件配置类注册自定义Filter类

打开之前创建的Servlet组件配置类ServletConfig,将该自定义Filter类使用组件注册方式进行注册。

/** 注册Filter组件 */
@Bean
public FilterRegistrationBean getFilter(MyFilter myFilter) {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(myFilter);
registrationBean.setUrlPatterns(Arrays.asList("/myFilter", "/toLoginPage"));
return registrationBean;
}

3. 请求测试

项目启动成功后,在浏览器上访问http://localhost:8080/myFilter查看控制台打印效果(这里由于我们没有编写对应路径的请求处理方法,所以浏览器会现404错误页面,这里重点关注控制台即可)。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

控制台会输出如下结果:

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

四. 使用组件注册方式整合Listener

1.创建自定义Listener类

我们可以在com.cy.servletComponent包下创建一个类MyListener。
package com.cy.servletComponent;
import org.springframework.stereotype.Component;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

/** 自定义Listener类 */
@Component
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized()...");
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
    System.out.println("contextDestroyed()...");
}

}

2. 向Servlet组件配置类注册自定义Listener类

我们可以打开之前创建的Servlet组件配置类ServletConfig,将该自定义Listener类使用组件注册方式进行注册。

/** 注册Listener组件 */
@Bean
public ServletListenerRegistrationBean getListener(MyListener myListener) {
ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(myListener);
return registrationBean;
}

需要说明的是,Servlet容器提供了很多Listener接口,例如ServletRequestListener、HttpSessionListener、ServletContextListener 等,我们在自定义Listener类时要根据自身需求选择实现对应接口即可。

3. 执行效果

完成自定义Listener组件注册后启动项目,项目启动成功后查看控制台打印效果。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

单击IDEA工具控制台左侧的[Exit]按钮,就可以关闭当前项目。注意,如果我们直接单击红色按钮会强制关闭程序,浏览器就无法打印关闭监听信息,再次查看控制台打印效果。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

将自定义的Servlet组件配置类ServletConfig全部注释并重启项目后,自定义的Servlet、Filter、Listener组件仍然生效。出现这种情况的主要原因是:嵌入式Servlet容器对Servlet、Filter、Listener组件进行了自动化识别和配置,而自定义的Servlet、Filter、Listener都继承/实现了对应的类/接口,同时自定义的Servlet、Filter、Listener组件都使用了@Component注解,这些组件会被自动扫描为Spring组件。

使用ServletRegistrationBean、FilterRegistrationBean、ServletListenerRegistrationBean组件组装配置的根本目的是对一些请求路径和参数进行初始化设置和组装。假设没有组件注册类,那么自定义Servlet虽然生效,但无法确定是哪个访问路径生效。自定义的Filter会对所有的请求都进行过滤,不会出现选择性过滤的情况。而自定义的Listener则没有太大影响,因为定制该组件基本不需要设置什么参数。

五. 路径扫描整合Servlet三大组件

在Spring Boot中,使用路径扫描的方式整合内嵌式Servlet 容器的Seviet Fiter 、Lste三大组件时,首先需要在自定义组件上分别添加WebSevle. @WebFiter和Weblistene注解进行声明,并配置相关注解属性,然后在项目主程序启动类上使用@SerletComponentScan
注解开启组件扫描即可。

1.使用路径扫描方式整合Servlet、Filter、Listener。

为了简化操作,在上小节自定义组件的基础上,我们使用路径扫描的方式来实现Servlet容器的Servlet、Filter、Listener三大组件的整合。

为了避免与之前编写的使用组件注册的方式相互干扰,先将之前自定义的Servlet组件配置类ServletConfig全部注释掉,同时注释掉自定义Servlet、Filter、Listener三大组件类上的@Component注解。

注释掉自定义MyServlet组件类上的@Component注解,在MyServlet组件中使用@WebServlet注解声明并配置相关属性。

/** 自定义Servlet类 /
//@Component
@WebServlet("/annotationServlet")
public class MyServlet extends HttpServlet {
// ...
}
然后注释掉自定义MyFilter组件类上的@Component注解,在MyFilter组件中使用@WebFilter注解声明并配置相关属性。
/* 自定义Filter类 /
//@Component
@WebFilter(value = {"/annotationLogin", "/annotationMyFilter"})
public class MyFilter implements Filter {
// ...
}
注释掉自定义MyListener组件类上的@Component注解,在MyListener组件中使用@WebListener注解声明并配置相关属性。
/* 自定义Listener类 */
//@Component
@WebListener
public class MyListener implements ServletContextListener {
// ...
}

使用相关注解配置好自定义三大组件后,需在项目主程序启动类上添加@ServletComponentScan注解,开启基于注解方式的Servlet组件扫描支持。
package com.cy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@ServletComponentScan // 开启基于注解方式的Servlet组件扫描支持
@SpringBootApplication
public class Chapter05Application {
public static void main(String[] args) {
SpringApplication.run(Chapter05Application.class, args);
}
}

2.效果测试

启动项目,项目启动成功后查看控制台打印效果。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

然后我们在浏览器上访问http://localhost:8080/annotationServlet进行测试。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

接着在浏览器上访问http://localhost:8080/annotationMyFilter查看控制台打印效果。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

单击IDEA工具控制台左侧的[Exit]按钮关闭当前项目,再次查看控制台打印效果。

极速掌握Spring Boot整合Servlet三大组件,Java,spring boot,servlet,hive

六. 回顾总结

关于Spring Boot整合Servlet三大组件,袁老师就给大家分享完了。首先,袁老师给大家介绍了SpringBoot框架整合Servlet、Filter和Listener三大核心组件;然后介绍了通过SpringBoot路径扫描整合Servlet三大组件的实现方式;最后我们通过功能测试验证是否整合成功。
关于Spring Boot整合Servlet三大组件的内容,袁老师就给大家介绍到这里了,你学会了吗?

>>零基础如何学习Java软件开发?如果正在迷茫找不到合适的学习资料,你不必在东瞅西逛,看这一套Java教程就够了!

 文章来源地址https://www.toymoban.com/news/detail-583841.html

到了这里,关于极速掌握Spring Boot整合Servlet三大组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Boot各版本与Java版本的对应兼容关系,与构建工具(Maven、Gradle)版本的对应兼容关系,对servlet 容器的支持

    by:垃圾程序员 当前文章具有时效性,在当前springboot的版本下做的整合。之后大家视情况可以直接到Spring的官网查看 Spring | Home Level up your Java code and explore what Spring can do for you. https://spring.io/ 下面是Spring Boot各个版本的支持时间 下面是Spring Boot 推荐使用的各个版面,并标注出

    2024年02月10日
    浏览(52)
  • Spring整合JUnit和Servlet

    1、Spring注解配置 @Component 组件 @Repository @Service @Controller @Value @Autowired @Qualifier ~=== @Resource @Bean @ComponentScan @PropertySource @Configuration @Import @EnableTransactionManagement AnnotationConfigApplicationContext 2、Spring整合Junit单元测试 1、Junit 简介 Junit 是 Java 编程语言的单元测试框架,用于编写和运

    2024年02月04日
    浏览(57)
  • 【Java核心知识】spring boot整合Mybatis plus + Phoenix 访问Hbase与使用注意

    为什么Phoenix能让开发者通过SQL访问Hbase而不必使用原生的方式?引用Phoenix官网上的一句话:SQL is just a way of expressing what you want to get not how you want to get it . 即SQL不是一种数据操作技术,而是一种特殊的表达方式。只是表示你需要什么而不是你如何获得。 一个集成了Phoenix的Hb

    2024年02月15日
    浏览(68)
  • spring boot java项目整合Scala&Spark,接口api调用方式调用scala代码,配置分享

    版本说明: spring boot: 2.5.9 jdk:1.8 spark:2.4.5 sclala:2.11.12 首先你需要有一个完美的spring boot项目(java版本)能成功运行,这就不赘述了,按照网上的自己搭建吧,然后重要的来了,我捣鼓了两天时间,各样的报错见过了,网上的处理方法要嘛是不全,要嘛是没有用,各种办

    2024年02月10日
    浏览(52)
  • Spring BOOT:javax.servlet.http.HttpServletRequest异常

     Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.IllegalStateException: No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest] with root cause                  用SpringBoot做验证码的时候,需要用HttpServletReque

    2024年02月11日
    浏览(48)
  • spring boot整合第三方微信开发工具 weixin-java-miniapp 实现小程序微信登录

    有时候项目需要用到微信登录或获取用户的手机号码,weixin-java-miniapp是一个好用的第三方工具,不用我们自己写httpcline调用。 导入jar包 添加一个resource.properties文件,写上小程序的appid和secret 添加两个配置文件 WxMaProperties.java WxMaConfiguration.java 如何使用 小程序给微信发送消息

    2024年02月16日
    浏览(59)
  • servlet -> spring-mvc -> spring-boot-> spring-security目录

    springMVC 启动源码 spring-boot注册servlet 3.多种方式注册servlet spring-boot自动注入DispatchServlet spring-security核心配置解读(粗) spring-security源码解读(新)

    2024年02月09日
    浏览(44)
  • spring boot es | spring boot 整合elasticsearch | spring boot整合多数据源es

    目录 Spring Boot与ES版本对应 Maven依赖 配置类 使用方式 @Test中注入方式 @Component中注入方式 查询文档 实体类 通过ElasticsearchRestTemplate查询 通过JPA查询 保存文档 参考链接 项目组件版本: Spring Boot:2.2.13.RELEASE Elasticsearch:6.8.0 JDK:1.8.0_66 Tips: 主要看第3列和第5列,根据ES版本选择

    2023年04月18日
    浏览(58)
  • 【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理 🎉欢迎大家点赞👍评论📝收藏⭐文章 配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在⼀个集中的地方,当我们启 动某个程序时,应用程

    2024年04月23日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包