转自:http://blog.csdn.net/xiaoyu411502/article/details/47864969
今天给大家介绍一下Spring Boot MVC,让我们学习一下如何利用Spring Boot快速的搭建一个简单的web应用。
环境准备
- 一个称手的文本编辑器(例如Vim、Emacs、Sublime Text)或者IDE(Eclipse、Idea Intellij)
- Java环境(JDK 1.7或以上版本)
- Maven 3.0+(Eclipse和Idea IntelliJ内置,如果使用IDE并且不使用命令行工具可以不安装)
一个最简单的Web应用
使用Spring Boot框架可以大大加速Web应用的开发过程,首先在Maven项目依赖中引入spring-boot-starter-web
:
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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tianmaying</groupId>
<artifactId>spring-web-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-web-demo</name>
<description>Demo project for Spring WebMvc</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
接下来创建src/main/java/Application.java
:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class Application {
@RequestMapping("/")
public String greeting() {
return "Hello World!";
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
运行应用:mvn spring-boot:run
或在IDE中运行main()
方法,在浏览器中访问http://localhost:8080,Hello World!
就出现在了页面中。只用了区区十几行Java代码,一个Hello World应用就可以正确运行了,那么这段代码究竟做了什么呢?我们从程序的入口SpringApplication.run(Application.class, args);
开始分析:
-
SpringApplication
是Spring Boot框架中描述Spring应用的类,它的run()
方法会创建一个Spring应用上下文(Application Context)。另一方面它会扫描当前应用类路径上的依赖,例如本例中发现spring-webmvc
(由spring-boot-starter-web
传递引入)在类路径中,那么Spring Boot会判断这是一个Web应用,并启动一个内嵌的Servlet容器(默认是Tomcat)用于处理HTTP请求。 -
Spring WebMvc框架会将Servlet容器里收到的HTTP请求根据路径分发给对应的
@Controller
类进行处理,@RestController
是一类特殊的@Controller
,它的返回值直接作为HTTP Response的Body部分返回给浏览器。 -
@RequestMapping
注解表明该方法处理那些URL对应的HTTP请求,也就是我们常说的URL路由(routing),请求的分发工作是有Spring完成的。例如上面的代码中http://localhost:8080/
根路径就被路由至greeting()
方法进行处理。如果访问http://localhost:8080/hello
,则会出现404 Not Found
错误,因为我们并没有编写任何方法来处理/hello
请求。
使用@Controller
实现URL路由
现代Web应用往往包括很多页面,不同的页面也对应着不同的URL。对于不同的URL,通常需要不同的方法进行处理并返回不同的内容。
匹配多个URL
@RestController
public class Application {
@RequestMapping("/")
public String index() {
return "Index Page";
}
@RequestMapping("/hello")
public String hello() {
return "Hello World!";
}
}
@RequestMapping
可以注解@Controller
类:
@RestController
@RequestMapping("/classPath")
public class Application {
@RequestMapping("/methodPath")
public String method() {
return "mapping url is /classPath/methodPath";
}
}
method
方法匹配的URL是/classPath/methodPath"
。
提示
可以定义多个@Controller
将不同URL的处理方法分散在不同的类中
URL中的变量——PathVariable
在Web应用中URL通常不是一成不变的,例如微博两个不同用户的个人主页对应两个不同的URL:http://weibo.com/user1
,http://weibo.com/user2
。我们不可能对于每一个用户都编写一个被@RequestMapping
注解的方法来处理其请求,Spring MVC提供了一套机制来处理这种情况:
@RequestMapping("/users/{username}")
public String userProfile(@PathVariable("username") String username) {
return String.format("user %s", username);
}
@RequestMapping("/posts/{id}")
public String post(@PathVariable("id") int id) {
return String.format("post %d", id);
}
在上述例子中,URL中的变量可以用{variableName}
来表示,同时在方法的参数中加上@PathVariable("variableName")
,那么当请求被转发给该方法处理时,对应的URL中的变量会被自动赋值给被@PathVariable
注解的参数(能够自动根据参数类型赋值,例如上例中的int
)。
支持HTTP方法
对于HTTP请求除了其URL,还需要注意它的方法(Method)。例如我们在浏览器中访问一个页面通常是GET方法,而表单的提交一般是POST方法。@Controller
中的方法同样需要对其进行区分:
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginGet() {
return "Login Page";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String loginPost() {
return "Login Post Request";
}
模板渲染
在之前所有的@RequestMapping
注解的方法中,返回值字符串都被直接传送到浏览器端并显示给用户。但是为了能够呈现更加丰富、美观的页面,我们需要将HTML代码返回给浏览器,浏览器再进行页面的渲染、显示。
一种很直观的方法是在处理请求的方法中,直接返回HTML代码,但是这样做的问题在于——一个复杂的页面HTML代码往往也非常复杂,并且嵌入在Java代码中十分不利于维护。更好的做法是将页面的HTML代码写在模板文件中,渲染后再返回给用户。为了能够进行模板渲染,需要将@RestController
改成@Controller
:
import org.springframework.ui.Model;
@Controller
public class HelloController {
@RequestMapping("/hello/{name}")
public String hello(@PathVariable("name") String name, Model model) {
model.addAttribute("name", name);
return "hello"
}
}
在上述例子中,返回值"hello"
并非直接将字符串返回给浏览器,而是寻找名字为hello
的模板进行渲染,我们使用Thymeleaf模板引擎进行模板渲染,需要引入依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
接下来需要在默认的模板文件夹src/main/resources/templates/
目录下添加一个模板文件hello.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>
th:text="'Hello, ' + ${name} + '!'"
也就是将我们之前在@Controller
方法里添加至Model
的属性name
进行渲染,并放入<p>
标签中(因为th:text
是<p>
标签的属性)。模板渲染还有更多的用法,请参考Thymeleaf官方文档。
处理静态文件
浏览器页面使用HTML作为描述语言,那么必然也脱离不了CSS以及JavaScript。为了能够浏览器能够正确加载类似/css/style.css
, /js/main.js
等资源,默认情况下我们只需要在src/main/resources/static
目录下添加css/style.css
和js/main.js
文件后,Spring MVC能够自动将他们发布,通过访问/css/style.css
, /js/main.js
也就可以正确加载这些资源。
参考:
1.教程:https://blog.yoodb.com/springboot/tutorial
相关推荐
### 四、myspringboot和myspringboot-maven子项目 这两个子项目可能分别代表了一个基于Maven构建的Spring Boot应用实例和一个包含Maven配置的示例。在`myspringboot`项目中,你可以看到一个完整的Spring Boot应用...
### Spring Boot 快速入门详解 #### 一、Spring Boot 概述 Spring Boot 是由 Pivotal 团队提供的一款旨在简化 Spring 应用程序搭建及开发过程的框架。其核心价值在于通过一系列约定来简化开发者的配置工作,使得...
通过这种方式,Spring Boot 实现了快速构建和运行 Spring 应用的目标,降低了入门门槛,特别是对于初学者和希望提高开发效率的团队。同时,它遵循了 Spring 社区的最佳实践,确保了应用的稳定性和可维护性。因此,...
### Spring Boot 入门教程详解 #### Spring Boot 框架概述 Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式(习惯优于配置)来简化整个 ...
**Spring Boot 快速入门 (官方quick start)** Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化创建独立的、生产级别的基于 Spring 的应用。它通过自动配置和“起步依赖”(Starter Dependency)使得设置...
### Spring Boot 入门详解 #### 一、Spring 发展历程与 Java 配置方式 Spring 是一个开源框架,最初由 Rod Johnson 创建,目的是为了简化企业级应用的开发。随着时间的发展,Spring 框架经历了多个重要的阶段: #...
本课程从SpringBoot的最基础的安装、配置开始到SpringBoot的日志管理、Web业务开发、数据存储、数据缓存,安全控制及相关企业级应用,全程案例贯穿,案例每一步的都会讲解实现思路,全程手敲代码实现。...
**Spring Boot 入门与实战** Spring Boot 是一个由 Pivotal 团队开发的 Java 框架,旨在简化创建独立的、生产级别的基于 Spring 的应用。它通过提供默认配置来消除大量的样板代码,使得开发者可以更快地构建应用...
这个“Spring Boot系列教程入门”将引导你深入了解如何利用Spring Boot快速构建高效、可维护的Web应用。 首先,我们从核心概念开始。Spring Boot的核心优势在于它的“约定优于配置”原则,这意味着它默认设置了一...
本篇文章将深入探讨Spring Boot入门项目的构建过程,以及它如何与微服务和分布式系统相结合。 **1. Spring Boot基础知识** Spring Boot 的核心理念是“约定优于配置”。它通过内置的Tomcat服务器、自动配置的Spring...
【玩转Spring Boot 快速开始(1)】 Spring Boot 是一个由 Pivotal 团队提供的全新框架,旨在简化Spring 应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、...
1. **快速启动与运行**:Spring Boot的"Spring Initializr"工具允许开发者在线创建项目骨架,快速生成基本的项目结构,大大减少了手动配置的时间。 2. **简化编码**:通过自动配置,Spring Boot能根据项目中的类和...
Spring Boot 2.x基础教程:快速入门 Spring Boot 2.x基础教程:工程结构推荐 配置详解 Spring Boot 2.x基础教程:配置文件详解 Spring Boot 2.x基础教程:2.4版本前后的多环境配置变化 Spring Boot 2.x基础教程:2.4...
### Spring Boot框架入门知识点详解 #### 一、Spring Boot简介 **Spring Boot** 是一个基于Spring框架构建的应用程序启动框架,旨在简化Spring应用程序的初始设置和配置。它为开发者提供了开箱即用的体验,自动...
Spring Boot 是一个由 ...总之,Spring Boot 以其简洁的配置、快速的开发体验,成为了现代 Java 开发中的热门选择。通过学习和实践提供的示例代码,开发者可以更深入地理解并掌握 Spring Boot 的核心概念和功能。
Spring Boot是Java领域中的一个热门框架,它极大地简化了Spring应用程序的初始搭建以及开发过程,旨在“开箱即用”,让开发者能够快速构建可运行的Java应用。 这本书首先会介绍Spring Boot的基础概念,包括其核心...
书中除了可能包含基础入门知识外,也很可能涵盖了对于Spring Boot高级特性的讨论,比如微服务架构和响应式编程的实践,这些内容在当下Java开发领域中非常流行且具有实际应用价值。 标签“spring boot”、“java”、...
**Spring Boot 入门程序详解** Spring Boot 是一个由 Pivotal 团队开发的 Java 框架,它的设计目标是简化 Spring 应用的初始搭建以及开发过程。Spring Boot 通过提供“开箱即用”的特性,使得开发者能够快速创建...
在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...
2. **起步依赖(Starter POMs)**:Spring Boot 提供了一系列的起步依赖,如 `spring-boot-starter-web`,这些依赖包含了开发特定功能所需的所有依赖,方便开发者快速集成。 3. **内嵌服务器**:Spring Boot 内置了...