Spring Boot MVC示例

x33g5p2x  于2022-10-04 转载在 Spring  
字(4.4k)|赞(0)|评价(0)|浏览(658)

在本教程中,我们将学习如何创建一个基于**Spring MVC模式的应用程序,并使用模板引擎Thymeleaf渲染页面视图。

设置MVC项目

开箱后,Spring BootSpring MVC提供了默认配置。而当你把模板引擎带入项目时,你也会得到所有需要的视图解析器,以便从标准JSP编程转移到现代模板引擎。

让我们从**Spring Boot Initializer开始,选择 "Web "和 "Thymeleaf "作为你项目的依赖。下载并解压该项目到你的硬盘上。

在你最喜欢的IDE中导入项目,让我们开始为它添加代码吧

这就是最初的项目结构。

  1. src
  2. ├── main
  3.    ├── java
  4.       └── com
  5.       └── example
  6.       └── demo
  7.       └── DemoApplication.java
  8.    └── resources
  9.    ├── application.properties
  10.    ├── static
  11.    └── templates
  12. └── test
  13. └── java
  14. └── com
  15. └── example
  16. └── demo
  17. └── DemoApplicationTests.java

视图的编码

在模板目录中,我创建了一个名为persons.html的新HTML文件。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE HTML>
  3. <html xmlns:th="http://www.thymeleaf.org">
  4. <head>
  5. <title>Spring Boot Thymeleaf Hello World Example</title>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  7. </head>
  8. <body>
  9. <h1>MasterSpringBoot</h1>
  10. <h2>Spring Boot Thymeleaf Hello World Example</h2>
  11. <table border="1" class="table">
  12. <thead>
  13. <tr>
  14. <th>First Name</th>
  15. <th>Last Name</th>
  16. </tr>
  17. </thead>
  18. <tbody>
  19. <tr th:each="person : ${persons}">
  20. <td th:text="${person.name}"></td>
  21. <td th:text="${person.surname}"></td>
  22. </tr>
  23. </tbody>
  24. </table>
  25. </body>
  26. </html>

从上面的代码可以看出,我需要对我的HTML文件做的第一件事就是为Thymeleaf添加XML命名空间。

在页面中,我们要显示一个HTML表格,使用一个迭代器来显示模型中加载的所有Person对象。为了做到这一点,我们使用th:each迭代模型中的人员列表并创建一个新的Person对象。神奇的是,Thymeleaf能够在我们进行过程中为我解决这个问题。

一旦完成了对人员的迭代,我们需要使用th:text标签来填充表格单元,该标签引用了Person对象的属性。

对模型进行编码

下一步,我们将在HTML中添加一个具有我们已经看到的属性(名字、姓氏)的Person模型对象。

  1. package com.example.demo;
  2. public class Person {
  3. private String name;
  4. private String surname;
  5. public Person(String name, String surname) {
  6. super();
  7. this.name = name;
  8. this.surname = surname;
  9. }
  10. public Person() {
  11. super();
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public String getSurname() {
  20. return surname;
  21. }
  22. public void setSurname(String surname) {
  23. this.surname = surname;
  24. }
  25. }

编码控制器

最后,我们需要一个控制器给我们的Person对象,所以我们将创建一个PersonController类。

  1. package com.example.demo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import org.springframework.stereotype.Controller;
  5. import org.springframework.ui.Model;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RestController;
  9. @Controller
  10. @RequestMapping("/persons")
  11. public class PersonController {
  12. private static List<Person> persons = new ArrayList();
  13. static {
  14. Person p1 = new Person("Jack", "Smith");
  15. Person p2 = new Person("Lucas", "Derrik");
  16. Person p3 = new Person("Andy", "Miller");
  17. persons.add(p1);
  18. persons.add(p2);
  19. persons.add(p3);
  20. }
  21. @GetMapping
  22. public String getAllPersons(Model model) {
  23. model.addAttribute("persons", persons);
  24. return "persons";
  25. }
  26. }

我们用**@Controller**来注解这个类,这样它就可以被组件扫描了。而且我们还需要一个RequestMapping。在这个类中,我们需要添加一些样本数据。为了简单起见,我们将静态地创建一个Person的列表。

现在,一旦完成,让我们创建一个GetMapping。我们将返回一个名为getAllPersons的公共字符串。在这个方法的参数中,我们将传递一个叫做Model的对象,它是org.spring框架UI包中的一个对象。

这个对象将在你的视图中以 "人 "的名义出现。正如你所看到的,该方法也返回 "persons",这只是你的视图的名称。

运行应用程序

最后,我们能够运行应用程序,并请求获得http://localhost:8080/persons

下面是Thymeleaf产生的视图。

添加CSS和Javascript

为了改进我们的例子,我们将添加一些静态资源,如CSS和Javascript。首先,你应该把这些资源放在resources/static文件夹下,如下面的目录树。

  1. src/main/resources/
  2. ├── application.properties
  3. ├── static
  4.    ├── css
  5.       └── main.css
  6.    └── js
  7.    └── functions.js
  8. └── templates
  9. └── persons.html

所以我们已经添加了以下资源。

main.css - 这是一个样式表,用于自定义视图的外观。
functions.js - 这是一个javascript文件,它包含一个我们将在主页面加载时触发的函数。

这里是main.css。

  1. h1{ color:#0000FF; } h2{ color:#FF0000; }

最后,这是 functions.js。

  1. function hello() {
  2. alert("Hello from Spring MVC");
  3. }

为了包括上述静态资源,我们将更新我们的HTML页面的HEAD部分,如下所示。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE HTML>
  3. <html xmlns:th="http://www.thymeleaf.org">
  4. <head> <title>Spring Boot Thymeleaf Hello World Example</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
  5. <link th:href="@{/css/main.css}" rel="stylesheet" />
  6. <script type="text/javascript" th:src="@{/js/functions.js}"></script>
  7. </head>
  8. <body onload="hello()">
  9. <!-- Unchanged -->
  10. </body>
  11. </html>

这就是了。再次检查persons.html页面,看看是否有变化。

本教程的源代码:https://github.com/fmarchioni/masterspringboot/tree/master/mvc/mvc-demo

相关文章