SpringBoot注册web组件的实现方式

 更新时间:2023年10月06日 09:01:22   作者:会洗碗的CV工程师  
Servlet是Java Web应用程序的基础,它提供了处理客户端请求的机制,Servlet三大组件是指Servlet、Filter和Listener,它们是Java Web应用程序的核心组件,本文将给大家介绍一下SpringBoot注册web组件的实现方式,需要的朋友可以参考下

前言

Servlet是Java Web应用程序的基础,它提供了处理客户端请求的机制。Servlet三大组件是指Servlet、Filter和Listener,它们是Java Web应用程序的核心组件。

  • Servlet:Servlet是Java Web应用程序的基础,它是一个Java类,用于处理客户端请求并生成响应。Servlet可以通过注解或web.xml文件进行配置,它通常用于处理HTTP请求和响应。
  • Filter:Filter是一个Java类,用于拦截和处理客户端请求和响应。Filter可以在请求到达Servlet之前或响应返回客户端之前执行预处理和后处理操作,例如验证用户身份、编码解码、压缩和解压缩等。
  • Listener:Listener是一个Java类,用于监听Web应用程序中的事件,并在事件发生时执行相应的操作。Listener可以通过注解或web.xml文件进行配置,它通常用于处理应用程序启动、停止、会话创建和销毁等事件。

总之,Servlet三大组件是Java Web应用程序的核心组件,它们分别用于处理请求、拦截请求和监听事件,从而实现了一个完整的Java Web应用程序。

一、注册Servlet组件

由于SpringBoot项目没有web.xml文件,所以无法在web.xml中注册web组件,SpringBoot有自己的方式注册web组件。

1.1 使用SpringBoot注解加继承HttpServet类注册

编写servlet,首先是要添加@WebServlet注解;代码如下:

package com.example.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/first")
public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("First Servlet......");
        super.doGet(req, resp);
    }
}

启动类添加扫描Web组件用到的注解@ServletComponentScan

OK,直接运行看效果:访问:http://localhost:8080/first

是可以直接打印出来的。

1.2 通过继承HttpServet类加配置类来进行注册

ok,接下来我们讲解第二种注册方式,通过继承HttpServet类来进行注册,代码如下:

package com.example.demo.servlet;
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 SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("Second Servlet........");
        super.doGet(req, resp);
    }
}

这里我们需要新建一个配置类,将该Servlet加载到Spring容器中,配置类代码如下

package com.example.demo.config;
import com.example.demo.servlet.SecondServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServletConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public ServletRegistrationBean getServletRegistrationBean(){
        // 注册Servlet组件
        ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
        // 将Servlet组件添加访问路径
        bean.addUrlMappings("/second");
        return bean;
    }
}

OK,然后我们点击运行,直接访问http://localhost:8080/second 

因此说明了两种注册方式都是可用的。 

二、注册Listener组件

2.1  使用SpringBoot注解和实现ServletContextListener接口注册

原理和上面一样只不过是直接注解,无需配置类,代码如下

package com.example.demo.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener()
public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("FirsListener.........");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }
}

此时如果我们直接运行项目就会打印上面那句话,接下来我们直接运行项目,看看是否打印,

说明该方法是可行的,

2.2 ServletContextListener接口和配置类来进行注册

同样我们去掉注解使用配置类注册 ,代码如下:

package com.example.demo.listener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class SecondListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Second Listener...........");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContextListener.super.contextDestroyed(sce);
    }
}

配置类代码入下:

package com.example.demo.config;
import com.example.demo.listener.SecondListener;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ListenerConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
        // 注册Listener组件
        ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
        return bean;
    }
}

 然后直接运行看看结果,

OK,同样也是没有问题的。 

三、注册Filter组件

3.1  使用SpringBoot注解加实现Filter接口注册

和上面一样,代码如下:

package com.example.demo.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
import java.util.Scanner;
//@WebFilter("/first")
public class FirstServletFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入First Filter");
        Scanner scanner = new Scanner(System.in);
        boolean flag = scanner.nextBoolean();
        while(!flag){
            System.out.println("要输入true才放行!!!");
            flag = scanner.nextBoolean();
        }
        filterChain.doFilter(servletRequest,servletResponse);
        scanner.close();
    }
    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

这里访问/frist的话/我们要输入true才进行放行,看看是否成功过滤, 

OK,这里是成功了的,接下来也是一样的操作 

3.2 通过实现Filter接口和配置类来进行注册通过实现

代码如下:

package com.example.demo.filter;
import javax.servlet.*;
import java.io.IOException;
import java.util.Scanner;
public class SecondFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入Second Filter");
        Scanner scanner = new Scanner(System.in);
        boolean flag = scanner.nextBoolean();
        while(!flag){
            System.out.println("要输入true才可以放行!!!");
            flag = scanner.nextBoolean();
        }
        filterChain.doFilter(servletRequest,servletResponse);
        scanner.close();
    }
    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

配置类代码如下:

package com.example.demo.config;
import com.example.demo.filter.SecondFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FilterConfig {
    // ServletRegistrationBean可以注册Servlet组件,将其放入Spring容器中即可注册Servlet
    @Bean
    public FilterRegistrationBean getFilterRegistrationBean (){
        // 注册filter组件
        FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
        // 添加过滤路径
        bean.addUrlPatterns("/second");
        return bean;
    }
}

同样这里访问/second的话/我们要输入true才进行放行,看看是否成功过滤,

OK,这里已经成功实现了!!! 

以上就是SpringBoot注册web组件的实现方式的详细内容,更多关于SpringBoot注册web组件的资料请关注脚本之家其它相关文章!

相关文章

  • 解决SpringBoot扫描不到公共类的实体问题

    解决SpringBoot扫描不到公共类的实体问题

    这篇文章主要介绍了解决SpringBoot扫描不到公共类的实体问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • BeanUtils.copyProperties()拷贝id属性失败的原因及解决

    BeanUtils.copyProperties()拷贝id属性失败的原因及解决

    这篇文章主要介绍了BeanUtils.copyProperties()拷贝id属性失败的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java数据结构算法稀疏数组示例详解

    java数据结构算法稀疏数组示例详解

    这篇文章主要为大家介绍了java数据结构算法稀疏数组示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 使用Java和ffmpeg把音频和视频合成视频的操作方法

    使用Java和ffmpeg把音频和视频合成视频的操作方法

    这篇文章主要介绍了使用Java和ffmpeg把音频和视频合成视频,本文通过实例代码给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • SpringBoot依赖管理的源码解析

    SpringBoot依赖管理的源码解析

    这篇文章主要介绍了SpringBoot依赖管理的源码解析,maven提供了一套依赖管理机制,通过在pom.xml定义坐标,通过坐标从互联网的中央仓库下载依赖的构件(jar包),规范去管理依赖所有构件,这就叫依赖管理,需要的朋友可以参考下
    2023-04-04
  • Java中注解@JsonFormat与@DateTimeFormat的使用

    Java中注解@JsonFormat与@DateTimeFormat的使用

    从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,本文主要介绍了Java中注解@JsonFormat与@DateTimeFormat的使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • SPRING管理XML方式过程解析

    SPRING管理XML方式过程解析

    这篇文章主要介绍了SPRING管理XML方式过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Mybatis调用视图和存储过程的方法

    Mybatis调用视图和存储过程的方法

    MyBatis支持普通sql的查询、视图的查询、存储过程调用,是一种非常优秀的持久层框架。接下来通过本文给大家介绍mybatis调用视图和存储过程的方法,感兴趣的朋友一起看看吧
    2016-10-10
  • Spring Boot jar 启动时设置环境参数的操作

    Spring Boot jar 启动时设置环境参数的操作

    这篇文章主要介绍了Spring Boot jar 启动时设置环境参数的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 基于Java SWFTools实现把pdf转成swf

    基于Java SWFTools实现把pdf转成swf

    这篇文章主要介绍了基于Java SWFTools实现把pdf转成swf,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论