Spring Boot 整合 Web 开发全攻略

发布于:2025-08-07 ⋅ 阅读:(18) ⋅ 点赞:(0)

Spring Boot 整合 Web 开发全攻略

在 Web 开发中,Spring Boot 凭借其“约定大于配置”的思想,极大简化了传统 Spring 项目的繁琐配置。本文基于 Spring Boot 对 Web 开发的整合特性,详细讲解如何在 Spring Boot 中注册 Web 组件(Servlet、Filter、Listener)、管理静态资源以及使用 JSP 和 Thymeleaf 模板引擎,帮助开发者快速搭建 Web 应用。

一、Spring Boot 整合 Web 开发的优势

传统 Spring 项目开发 Web 应用时,需要在 web.xml 中手动配置 Servlet、Filter、Listener 等组件,还需处理依赖冲突、容器整合等问题。而 Spring Boot 通过以下特性简化了 Web 开发:

  • 自动配置:默认整合 Tomcat 作为嵌入式容器,无需手动部署 WAR 包,直接以 JAR 包形式运行。
  • 组件注册简化:通过注解或配置类即可注册 Web 组件,无需编写 XML 配置。
  • 静态资源管理:内置静态资源目录,无需额外配置即可访问 CSS、JS、图片等资源。
  • 模板引擎支持:推荐使用 Thymeleaf 作为动态页面模板,同时也支持 JSP(需额外配置)。

二、Web 核心组件注册

Web 组件(Servlet、Filter、Listener)是 Web 应用的基础,Spring Boot 提供了两种注册方式:注解扫描配置类注册

1. 注解扫描方式(推荐)

通过 @WebServlet@WebFilter@WebListener 注解标记组件,并在启动类添加 @ServletComponentScan 开启扫描,即可自动注册组件。

示例 1:注册 Servlet
// 定义 Servlet
@WebServlet("/first") // 映射访问路径
public class FirstServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        System.out.println("First Servlet 执行...");
        resp.getWriter().write("Hello Servlet");
    }
}
示例 2:注册 Filter
// 定义 Filter
@WebFilter(urlPatterns = "/first") // 拦截路径
public class FirstFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("进入 First Filter");
        chain.doFilter(request, response); // 放行请求
        System.out.println("离开 First Filter");
    }
}
示例 3:注册 Listener
// 定义 Listener
@WebListener
public class FirstListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("Servlet 容器初始化完成...");
    }
}
启动类开启扫描
@SpringBootApplication
@ServletComponentScan // 扫描 Web 组件注解
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}

2. 配置类注册方式

若需动态配置组件(如动态指定路径、初始化参数),可通过配置类手动注册组件。

示例:配置类注册 Servlet
@Configuration
public class ServletConfig {
    @Bean
    public ServletRegistrationBean<SecondServlet> getServletRegistrationBean() {
        // 注册 Servlet 实例
        ServletRegistrationBean<SecondServlet> bean = new ServletRegistrationBean<>(new SecondServlet());
        bean.addUrlMappings("/second"); // 设置访问路径
        bean.setLoadOnStartup(1); // 启动优先级
        return bean;
    }
}

// 定义 Servlet(无需注解)
public class SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.getWriter().write("Hello Second Servlet");
    }
}

同理,可通过 FilterRegistrationBean 注册 Filter,ServletListenerRegistrationBean 注册 Listener,用法与 Servlet 注册类似。

三、静态资源管理

Spring Boot 对静态资源(CSS、JS、图片等)有默认的目录约定,无需额外配置即可访问。

1. 默认静态资源目录

Spring Boot 会自动扫描以下目录中的静态资源:

  • classpath:/static/(推荐)
  • classpath:/public/
  • classpath:/resources/
  • classpath:/META-INF/resources/

例如,在 src/main/resources/static/css/ 下放置 style.css,可通过 http://localhost:8080/css/style.css 直接访问。

2. 自定义静态资源目录

若需修改静态资源目录,可在配置文件中自定义:

# application.yml
spring:
  web:
    resources:
      static-locations: classpath:/suibian/, classpath:/static/ 
      # 自定义目录为 /suibian/,同时保留默认 /static/

⚠️ 注意:自定义目录会覆盖默认配置,若需保留默认目录需手动添加。

四、动态页面开发

Spring Boot 推荐使用 Thymeleaf 作为模板引擎,同时也支持 JSP(需额外配置)。

1. 使用 Thymeleaf(推荐)

Thymeleaf 是一款基于 HTML 的模板引擎,支持静态预览(无需启动服务器即可查看页面结构),与 Spring Boot 无缝整合。

步骤 1:添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
步骤 2:创建模板文件

src/main/resources/templates/ 目录下创建 index.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"> <!-- 引入 Thymeleaf 命名空间 -->
<head>
    <title>Thymeleaf 示例</title>
</head>
<body>
    <h1 th:text="${msg}">默认文本</h1> <!-- 动态替换文本 -->
</body>
</html>
步骤 3:编写控制器跳转
@Controller
public class PageController {
    @GetMapping("/show")
    public String showPage(Model model) {
        model.addAttribute("msg", "Hello Thymeleaf"); // 传递数据到页面
        return "index"; // 跳转至 templates/index.html
    }
}

2. 使用 JSP(不推荐)

Spring Boot 对 JSP 支持有限,需手动配置 JSP 引擎和目录。

步骤 1:添加 JSP 依赖
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>
步骤 2:创建 webapp 目录

src/main/ 下创建 webapp/WEB-INF/jsp/ 目录,放置 JSP 文件(如 myJsp.jsp)。

步骤 3:配置视图解析器
# application.yml
spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp
步骤 4:控制器跳转
@Controller
public class JspController {
    @GetMapping("/jsp")
    public String showJsp() {
        return "myJsp"; // 跳转至 webapp/WEB-INF/jsp/myJsp.jsp
    }
}

五、常见问题与解决方案

  1. 静态资源访问 404?

    • 检查资源是否放在默认目录(staticpublic 等)或自定义目录中。
    • 确认资源路径是否正确(如 http://localhost:8080/img/logo.png 对应 static/img/logo.png)。
  2. Thymeleaf 模板无法解析?

    • 检查模板文件是否在 templates 目录下。
    • 确认控制器返回的视图名与模板文件名一致(不含 .html 后缀)。
  3. JSP 页面无法访问?

    • 确保已添加 tomcat-embed-jasper 依赖。
    • 检查 webapp 目录是否被标记为 Web 资源目录(IDEA 中右键目录 → Mark Directory asWeb Resource Directory)。

总结

Spring Boot 整合 Web 开发通过自动配置和简化的组件注册方式,大幅降低了开发难度。本文介绍了 Web 组件注册(注解扫描与配置类两种方式)、静态资源管理(默认目录与自定义配置)以及动态页面开发(Thymeleaf 与 JSP),覆盖了 Web 开发的核心场景。

实际开发中,推荐使用 Thymeleaf 作为模板引擎,配合注解方式注册组件,既能享受静态预览的便捷,又能减少配置工作量。


网站公告

今日签到

点亮在社区的每一天
去签到