Spring Boot 底层级探索系列 04 - Web 开发(1)

简介: Spring Boot 底层级探索系列 04 - Web 开发(1)

江帅帅,奈学教育,擅长系统架构设计,大数据,运维等技术领域;对大中后台技术有丰富经验(交易平台、基础服务、智能客服、基础架构、智能运维、数据库、安全、IT 等方向);曾担任怀致科技 CTO,并还在东软集团、中国移动、多迪集团等企业中任职过相关技术负责人。

1、Web 开发的支持

使用 Spring Boot 实现 Web 开发更加便捷了,因为直接依赖 spring-boot-starter-web 模块即可支持 Web 开发,此模块预定义了 Web 开发中常用的依赖包,还有内嵌的 Tomcat 作为默认 Web 容器。

2、Thymeleaf 模板引擎

目前,多数企业级应用开发中都支持前后端分离,但还有少数离不开视图层技术,Spring Boot 提供了很多模板引擎来支持视图层技术,比如 Thymeleaf、Freemarker、Velocity。

Thymeleaf 是官方推荐使用的新一代 Java 模板引擎,并支持 HTML 原型,模板表达式在脱离运行环境下不污染 HTML 结构,能让前端直接通过浏览器查看基本样式,也能让后端使用真实数据查看展示效果。

3、整合使用 Thymeleaf 模板

3.1. 创建工程

创建一个 Spring Boot 工程,编辑 pom.xml 文件,添加 web 和 thymeleaf 依赖。另外,App 启动类与之前一致。

<dependencies>
    <!-- 指定 web 依赖模块 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 指定 thymeleaf 模板-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>

3.2. 添加视图文件

在 src/main/resources/templates 目录下,新建 nicebook.html 文件。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>良心好书</title>
    </head>
    <body>
        <table border="1">
            <tr>
                <td>序号</td>
                <td>好书</td>
                <td>作者</td>
            </tr>
            <tr th:each="book:${books}">
                <td th:text="${book.id}"></td>
                <td th:text="${book.name}"></td>
                <td th:text="${book.author}"></td>
            </tr>
        </table>
    </body>
</html>

3.3. 配置 Thymeleaf

如果想自定义 Thymeleaf 配置参数,可以在 application.properties 文件中进行配置,常见的配置选项如下:

# 模板文件存放位置
spring.thymeleaf.prefix=classpath:/templates/
# 是否开启缓存,默认为 true,开发时可设置为 false
spring.thymeleaf.cache=true
# 检查模板位置是否存在,默认为 true
spring.thymeleaf.check-template-location=true
# 检查模板是否存在,默认为 true
spring.thymeleaf.check-template=true
# 模板文件后缀设置
spring.thymeleaf.suffix=.html
# 模板文件编码设置
spring.thymeleaf.encoding=UTF-8
# Content-Type 配置
spring.thymeleaf.servlet.content-type=text/html

3.4. 创建 POJO

public class Book {
    private Integer id;
    private String name;
    private String author;
    // getter 和 setter 方法
}

3.5. 创建 BookController 控制器

@Controller
public class BookController {
    @GetMapping("/books")
    public ModelAndView books() {
        List<Book> bookList = new ArrayList<>()
        Book book1 = new Book();
        book1.setId(1);
        book1.setName("《码农翻身:用故事给技术加点料》");
        book1.setAuthor("刘欣");
        Book book2 = new Book();
        book2.setId(2);
        book2.setName("《漫画算法:小灰的算法之旅(全彩)》");
        book2.setAuthor("魏梦舒");
        bookList.add(book1);
        bookList.add(book2);
        ModelAndView mv = new ModelAndView();
        mv.addObject("bookList");
        mv.setViewName("nicebook");
        return mv;
    }
}

3.6. 运行测试

浏览器中访问:http://localhost:8080/books,即可看到如下页面。

4、Thymeleaf 的支持

Spring Boot 通过 org.springframework.boot.autoconfigure.thymeleaf 包为 Thymeleaf 提供了自动配置,涉及到的类如下:

其中 ThymeleafAutoConfiguration 和 ThymeleafProperties 类是比较重要的,前者对集成所需要的 Bean 进行自动配置,后者主要读取 application.properties 配置文件,可自定义 Thymeleaf 的属性和默认配置。

ThymeleafProperties 类部分源码如下:

@ConfigurationProperties(
    prefix = "spring.thymeleaf"
)
public class ThymeleafProperties {
    private static final Charset DEFAULT_ENCODING;
    public static final String DEFAULT_PREFIX = "classpath:/templates/";
    public static final String DEFAULT_SUFFIX = ".html";
    private boolean checkTemplate = true;
    private boolean checkTemplateLocation = true;
    private String prefix = "classpath:/templates/";
    private String suffix = ".html";
    private String mode = "HTML";
    private Charset encoding;
    private boolean cache;
    private Integer templateResolverOrder;
    private String[] viewNames;
    private String[] excludedViewNames;
    private boolean enableSpringElCompiler;
    private boolean renderHiddenMarkersBeforeCheckboxes;
    private boolean enabled;
    private final ThymeleafProperties.Servlet servlet;
    private final ThymeleafProperties.Reactive reactive;
  
    ...   
}

5、拓展:Thymeleaf 常用语法

5.1. 使用 URL

通过 @{…} 来处理常见 URL。

<!-- 绝对路径 -->
<a th:href="@{http://www.naixuejiaoyu.com}">奈学教育</a>
<!-- 相对路径 -->
<a th:href="@{/}">奈学教育</a>
<!-- content 路径 -->
<a th:href="@{books/java/one.png}">奈学教育</a>

5.2. 使用表达式

主要用来从模板中的 WebContext 获取param、request、session 和 application 中的属性。使用 ${x} 即可返回存储在 Thymeleaf 上下文中的变量 x 或作为 request 作用域中的属性。

${param.x} 能够返回名为 x 的请求参数;
${session.x} 能够返回名为 x 的 HttpSession 作用域中的属性;
${application.x} 能够返回名为 x 的 ServletContext 作用域中的属性。

5.3. 使用字符串

如果需要对一段文字中的某一处进行替换,可以使用 |…| 这种便捷方式,但不能包含其他常量、条件表达式,只能包含变量表达式 ${…},有一定局限性。

<span th:text="|hello, ${userName}|"></span>

5.4. 使用运算符

平时看到的算术运算符和逻辑运算符都可以使用。

5.5. 使用条件判断

可以使用 th:if 和 th:unless 属性进行条件判断,前者条件成立时显示,后者不成立时才显示。也可以使用 Switch 结构,默认选项使用 * 来表示。

<a th:href="index.html" th:if=${name != null}>奈学教育</a>
<div th:switch="${books}">
    <p th:case="'Java'">Java 从入门到逃难</p>
    <p th:case="'Python'">Python 从入门到逃难</p>
</div>

5.6. 使用循环

使用 th:each 即可实现循环。

<tr th:each="book : ${bookList}">
    <td th:text="${book.id}"></td>
    <td th:text="${book.name}"></td>
    <td th:text="${book.author}"></td>
</tr>

5.7. 使用内置对象

通过 # 可以直接访问 Thymeleaf 的内置对象。

#dates:日期
#calendars:日历
#numbers:数值格式化
#strings:字符串格式化
#objects:对象
#maps:Map 操作工具
#aggregates:操作数组或集合的工具
#bools:布尔
#sets:Set 操作工具
#messages:消息
#arrays:Array 操作工具
#lists:List 操作工具

未完待续……

目录
相关文章
|
8天前
|
网络协议 Java Shell
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
40 7
|
23天前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
42 6
|
1月前
|
人工智能 Java API
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
|
1月前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
2月前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
909 0
|
2月前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
2月前
|
XML JSON Java
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
69 11
|
2月前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
80 5
|
2月前
|
XML Java 数据格式
Spring Boot 开发中的常见失误
本文深入分析了Spring Boot开发中常见的失误,包括不当使用@Component、@ResponseBody、@Autowired注解,以及不良的异常处理和日志记录实践,提供了有效的规避策略,帮助开发者提升代码质量和系统性能。
|
2月前
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南

热门文章

最新文章