Spring Boot:Web开发之三大组件的整合-Spring Boot 整合 Servlet

时间:2024-03-31 11:32:48

Spring Boot 为 Servlet API 提供了自动配置,整合过程相对简单。而将传统的 Servlet 组件集成到 Spring Boot 的应用中具体有两种方法。

简单示例:
第一种方法:
首先,在 Controller 包内创建 ServletDemo 类,使用 @WebServlet 注解配置 Servlet 映射

package cn.edu.SpringBootDemo.Controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebServlet(urlPatterns = "/ServletDemo.html")
public class ServletDemo extends HttpServlet {
    // 覆盖 doGet() 方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("调用 ServletDemo 的 doGet 方法!!!");
    }
}

然后,在 Spring Boot 启动类 SpringBootDemoApplication 上添加 @ServletComponentScan 注解

package cn.edu.SpringBootDemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan // 用于启用对带有 @WebServlet、@WebFilter、@WebListener 等 Servlet 3.0 注解的类的自动扫描和注册
public class SpringBootDemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(SpringBootDemoApplication.class, args);
    }
}

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/ServletDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述

第二种方法:
第二种方法与第一种方法的区别是无需使用到 @WebServlet 和 @ServletComponentScan 两个注解,而是使用一个返回类型为 ServletRegistrationBean 的方法替代。

首先,在 ServletDemo 类上注释 @WebServlet 注解

package cn.edu.SpringBootDemo.Controller;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

//@WebServlet(urlPatterns = "/ServletDemo.html")
public class ServletDemo extends HttpServlet {
    // 覆盖 doGet() 方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("第二种方法:调用 ServletDemo 的 doGet 方法!!!");
    }
}

然后,在 Spring Boot 启动类 SpringBootDemoApplication 上也注释 @ServletComponentScan 注解,并添加一个返回类型为 ServletRegistrationBean 的方法
在这里插入图片描述

package cn.edu.SpringBootDemo;

import cn.edu.SpringBootDemo.Controller.ServletDemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
//@ServletComponentScan // 用于启用对带有 @WebServlet、@WebFilter、@WebListener 等 Servlet 3.0 注解的类的自动扫描和注册
public class SpringBootDemoApplication {

    public static void main(String[] args) {

        SpringApplication.run(SpringBootDemoApplication.class, args);
    }

    @Bean // 注入 Spring 容器当中
    public ServletRegistrationBean getBean(){
        // Servlet 注册到 Spring Boot 当中
        ServletRegistrationBean bean = new ServletRegistrationBean(new ServletDemo());
        // url 地址关联
        bean.addUrlMappings("/ServletDemo.html");
        return bean;
    }
}

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/ServletDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述