当前位置: 首页 > ds >正文

Spring Boot 整合 Web 开发全攻略

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 {@Overrideprotected 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 {@Overridepublic 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 {@Overridepublic 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 {@Beanpublic 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 {@Overrideprotected 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 作为模板引擎,配合注解方式注册组件,既能享受静态预览的便捷,又能减少配置工作量。

http://www.xdnf.cn/news/17231.html

相关文章:

  • 深度拆解Dify:开源LLM开发平台的架构密码与技术突围
  • 消息队列疑难问题(RocketMQ)
  • 09-堆
  • GaussDB 常见问题-集中式
  • 8.5 CSS3多列布局
  • lumerical——Y分支功分器
  • Redis Stream:高性能消息队列核心原理揭秘
  • PDF转图片工具技术文档(命令行版本)
  • CRT调试堆检测:从原理到实战的资源泄漏排查指南
  • 北京JAVA基础面试30天打卡02
  • RocketMq如何保证消息的顺序性
  • 面向对象的七大设计原则
  • Kotlin属性委托
  • 探秘MOBILITY China 2026,新能源汽车与智慧出行的未来盛宴
  • React18 严格模式下的双重渲染之谜
  • 嵌入式硬件中运放的基本控制原理
  • 2025金九银十Java后端面试攻略
  • 天津大学2024-2025 预推免 机试题目(第二批)
  • 400V降24V,200mA,应用领域:从生活到工业的 “全能电源管家”
  • C++面向对象编程基础:从类定义到封装机制详解
  • 深度学习-卷积神经网络CNN-填充与步幅
  • 最新基于Python科研数据可视化实践技术
  • 【人工智能99问】什么是Post-Training,包含哪些内容?(19/99)
  • Next Terminal 实战:内网无密码安全登录
  • MCP进阶:工业协议与AI智能体的融合革命
  • Redis之Hash和List类型常用命令
  • VGMP(VRRP Group Management Protocol)VRRP组管理协议
  • Druid学习笔记 02、快速使用Druid的SqlParser解析
  • Solidity全局变量与安全实践指南
  • python中的字典