SpringBoot整合Java Web三大件

目的:注册自定义的Servlet、Filter、Listener组件到springboot内嵌的Servlet容器,让它们发挥自己的作用

使用Spring Bean 注册Java Web三大组件

路径扫描整合javaweb三大组件

1.三大组件上添加对应注解

在对应组件上分别使用@WebServlet("/annotationServlet")注解来映射"/annotationServlet"请求的Servlet类,

使用@WebFilter(value = {"/antionLogin","/antionMyFilter"})注解来映射"/antionLogin"和"/antionMyFilter"请求的Filter类,

使用@WebListener注解来标注Listener类。

java 复制代码
@WebServlet("/annotationServlet")
public class MyServlet extends HttpServlet {
java 复制代码
@WebFilter(value = {"/antionLogin","/antionMyFilter"})
public class MyFilter implements Filter {
java 复制代码
@WebListener
public class MyListener implements ServletContextListener {

2.主程序启动类上添加@ServletComponentScan注解,开启基于注解方式的Servlet组件扫描支持

java 复制代码
@ServletComponentScan
@SpringBootApplication
public class MyChapter05Application

3.测试

http://localhost:8080/annotationServlet

http://localhost:8080/antionLogin

http://localhost:8080/antionMyFilter

使用RegistrationBean注册Java Web三大件

使用组件注册方式整合Servlet

1.创建component子包及一个自定义Servlet类MyServlet,使用@Component注解将MyServlet类作为组件注入Spring容器。MyServlet类继承自HttpServlet,通过HttpServletResponse对象向页面输出"hello MyServlet"。

java 复制代码
@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.在config子包下创建Servlet组件配置类ServletConfig,来注册Servlet组件

java 复制代码
@Configuration
public class ServletConfig {
    // 注册servlet组件
    @Bean
    public ServletRegistrationBean getServlet(MyServlet myServlet) {
        ServletRegistrationBean registrationBean =
                new ServletRegistrationBean(myServlet, "/myServlet");
        return registrationBean;
    }
}

3.重启项目,启动成功后,在浏览器上访问http://localhost:8080/myServlet

使用组件注册方式整合Filter

1.在component包下创建一个自定义Filter类MyFilter,使用@Component注解将当前MyFilter类作为组件注入到Spring容器中。MyFilter类实现Filter接口,并重写了init()、doFilter()和destroy()方法,在doFilter()方法中向控制台打印了"hello MyFilter"字符串。

java 复制代码
@Component
public class MyFilter implements Filter {
 
	@Override 
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
 
			throws IOException, ServletException {
 
		System.out.println("hello my filter!"); 
		chain.doFilter(request, response);
 
	}
 
}

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

java 复制代码
@Bean                                                                            
public FilterRegistrationBean getFilter(MyFilter filter){                        
	                                                                             
	FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
	//过滤出请求路径"/toLoginPage","/myFilter",对它们特殊处理,也就是执行Filter中的方法。                 
	registrationBean.setUrlPatterns(Arrays.asList("/toLoginPage","/myFilter"));  
                                                                                 
	return registrationBean;                                                     
}                                                                                

3、项目启动成功后,在浏览器上访问http://localhost:8080/myFilter,查看控制台打印效果

使用组件注册方式整合Listener

1.创建一个类MyListener

java 复制代码
@Component
public class MyListener implements ServletContextListener {

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

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

java 复制代码
@Bean                                                                            
public ServletListenerRegistrationBean getServletListener(MyListener myListener){
                                                                                 
	ServletListenerRegistrationBean registrationBean =                           
			new ServletListenerRegistrationBean(myListener);                     
                                                                                 
	return registrationBean;                                                     
                                                                                 
}                                                                                

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

contextInitialized ...

4、正常关闭(保证是正常启动的)

步骤:

①`pom.xml`添加依赖:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

②配置文件`application.properties`:

#开启所有的端点

management.endpoints.web.exposure.include=*

#启用shutdown

management.endpoint.shutdown.enabled=true

③执行关闭请求(POST):

在开发者工具的console输入如下代码,然后按回车:

复制代码
fetch(new Request('http://localhost:8081/actuator/shutdown',{method:'POST'})).then((resp)=>{console.log(resp)})

结果:

相关推荐
时间静止不是简史15 分钟前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
m0_敲代码的彭于晏1683 小时前
Vercel 前端部署平台深度评测
前端
2301_32241428043 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
怕浪猫5 小时前
外包和大厂的前端代码,差在凌晨三点
前端·面试·github
m0_敲代码的彭于晏1685 小时前
Vercel 前端部署与全栈开发实战指南
前端·状态模式
徐小夕5 小时前
花了3个月,我们做了一款 AI 版的“飞书文档”
前端·算法·github
贾伟康5 小时前
【化学实验室|17】HarmonyOS ArkTS 亮暗色与视觉令牌实战:集中颜色、间距和交互状态避免页面割裂
前端·移动开发·harmonyos·arkts·arkui
金銀銅鐵6 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(上)
java·后端·ai编程
福建佰胜张工6 小时前
SMC 薄型气爪 MHF2-16D1 深度解析:平行开闭、低剖面结构在自动化装配中的选型与落地
java·服务器·安全·自动化
Csvn6 小时前
SSR/SSG/ISR(上):峡谷与渲染策略的时间预算
前端