本材料是“企业发展概论”系列的最后一部分。上一篇文章:
我们以 Spring-MVC 为例看一下最简单的 MVC 实现示例。为此,我们在 spring-boot 中编写一个小型 Hello World 应用程序。为了让您可以自己重复所有内容,我将为您提供分步说明。首先我们将编写一个小应用程序,然后我们将对其进行分析。
步骤1:在IntelliJ IDEA中创建一个spring-boot应用程序
使用文件 -> 新建 -> 项目... 创建一个新项目。在打开的窗口的左侧菜单中,选择 Spring Initializr,选择 Project SDK,并将 Initializr Service URL 选项保留为默认值。
单击下一步按钮。在下一个窗口中,我们需要选择项目参数。我们将有一个 Maven 项目。选择Type - Maven Project,填写Group和Artifact
,点击Next。在下一个窗口中,我们需要选择将使用的 Spring 框架组件。我们只需要两个:
- Spring Web 是一个允许我们创建 Web 应用程序的组件。该组件包括 Spring MVC。
- Thymeleaf - 所谓的模板引擎。允许我们将数据从 Java 传输到 HTML 页面的东西
在下一个窗口中,选择项目在文件系统中的名称和位置:
单击“完成”按钮。该项目已创建。我们有以下项目结构:
这里我们对 2 个文件感兴趣: pom.xml - 部署描述符。它允许您快速轻松地将库从不同框架导入到我们的项目中,以及我们在其中配置应用程序的程序集的东西。我们的应用程序是使用Maven构建的,pom.xml是这个构建系统的配置文件。Java 类 - MvcDemoApplication。这是我们应用程序的主类,我们将从中启动我们的 spring-boot 项目。首先,只需运行此类中的 main 方法。以下是此类的代码以及 pom.xml 文件:MvcDemoApplication:
@SpringBootApplication
public class MvcDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MvcDemoApplication.class, args);
}
}
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.javarush</groupId>
<artifactId>mvc_demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mvc_demo</name>
<description>Spring MVC Demo</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
步骤 2. 创建网页
我们的应用程序将非常简单。我们将有一个主页 - index.html,其中有一个到欢迎页面的链接 - Greeting.html。在问候语页面上,我们将显示问候语。让我们实现通过 url 参数向greeting.html 页面发送问候语名称的功能。让我们创建应用程序的主页 - index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Main page</title>
</head>
<body>
<p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>
现在让我们创建greeting.html页面:
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Getting Started: Serving Web Content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>
这里,从一个非典型的html页面中,你可以看到一个标签: tag
<p th:text="'Hello, ' + ${name} + '!'" />
属性是Thymeleaf模板引擎的一个工具。多亏了它,标签的值将是文本“Hello,”+变量的值,我们将从 Java 代码中设置该值。
th
p
p
name
第三步:创建控制器
在 mvc_demo 包中,我们将创建一个控制器包,在其中我们将创建控制器 HelloWorldController:
@Controller
public class HelloWorldController {
@RequestMapping(value = "/greeting")
public String helloWorldController(@RequestParam(name = "name", required = false, defaultValue = "World") String name, Model model) {
model.addAttribute("name", name);
return "greeting";
}
}
一方面,代码很少,但另一方面,却发生了很多事情。我们开始分析吧。@Controller注解表明该类是一个控制器。Spring 中的控制器处理对特定地址的 HTTP 请求。我们的类有一个 helloWorldController 方法,该方法用注释标记 - @RequestMapping(value = "/greeting")。该注释告诉我们该方法处理对 /greeting 地址的 HTTP GET 请求。换句话说,如果有人去/greeting,这个方法就会起作用。该方法返回字符串。根据Spring-MVC,控制器方法必须返回视图的名称。接下来,Spring 将查找同名的 html 文件,该文件将作为对 HTTP 请求的响应返回。正如您所看到的,我们的方法返回我们之前创建的网页的名称 -greeting。我们的方法有 2 个参数。我们来看一下: 参数 1:@RequestParam(name = "name", required = false, defaultValue = "World") 字符串名称。@RequestParam 注释指出 String name 参数是 url 参数。注解括号表示url中的该参数是可选的(required = false),如果不存在,则String name参数的值为World(defaultValue = "World"),如果存在,则该参数url中会被称为name(name = "name") 这里可能有很多不清楚的地方。让我们举个例子。下表显示了访问 /greeting 地址的不同选项的字符串名称参数的值(URL 中带参数和不带参数)
示例网址 |
字符串名称参数值 |
/问候语 |
世界 |
/问候?名字=阿米戈 |
朋友 |
/问候?名字=佐尔 |
佐尔 |
参数2:第二个参数为Model型号。该参数是一个模型。该模型内部由各种属性组成。每个属性都有一个名称和一个值。像键值对之类的东西。使用这个参数,我们可以将数据从Java代码传输到html页面。或者,用 MVC 术语来说,将数据从模型传输到视图。剩下的就是解析最后一行。我们将数据从 Java 传递到 html 或从模型传递到视图的方式。该方法的主体包含以下行:
model.addAttribute("name", name);
这里我们创建一个名为 name 的新属性,并为其分配 name 参数的值。请记住,最近我们讨论了该标签:
<p th:text="'Hello, ' + ${name} + '!'" />
我们说过 p 标签的值将是文本“Hello,”+ name 变量的值,我们将从 Java 代码中设置该值。我们使用该行设置该值
model.addAttribute("name", name);
步骤 5. 启动
要启动,我们需要运行 MvcDemoApplication 类中的 main 方法:
在启动日志中,我们将看到我们的 Web 应用程序在端口 8080 上启动:
这意味着我们可以在浏览器中转到该页面:
http:// localhost:8080:
这里向我们显示了页面index.html。让我们点击greetin 的链接:
在此转换期间,我们的控制器工作了。我们没有通过 URL 传递任何参数,因此,如注释中所述,name 属性的值采用默认值 World。现在让我们尝试通过 url 传递参数:
一切都按预期进行。现在尝试跟踪 name 变量的路径:
- 用户传递参数name=Amigo的值->via url
- 控制器处理我们的操作,接受名称变量并设置模型属性,其中包含名称 name 和接受的值 ->
- 从模型中,该数据进入视图、greeting.html 页面并显示给用户
就这样!
今天我们向您介绍了一个相当大且有趣的MVC(模型-视图-控制器)主题。这是本系列的结尾,其目的是向您介绍在开始企业开发之前需要了解的内容。
在评论中留下您感兴趣的主题 - 我们会做的! |
GO TO FULL VERSION