Spring Boot 之一:从一个小程序开始

1、工具环境安装

  推荐使用Spring Tool Suite4,官网下载:https://spring.io/tools

  配套工具安装lombok,官网下载:https://projectlombok.org/download


2、初始化SpringBoot工程

  File -> New -> Spring Starter Project

  初始化 SpringBoot工程信息

  选择 Spring Boot 版本,选择要使用的功能对应的 Starter,然后点击 Finish,IDE 会自动完成剩下的工作。

  Starter 使开发人员避免陷入各种依赖的版本兼容问题的泥淖,只要 Spring Boot 库中有对应的 Starter 即可一键引入,并且官方保证依赖的兼容性。


3、默认配置和规则

  一个 Spring Boot 工程完成初始化之后默认自动生成的文件目录结构如下:

  • mvnw和mvnw.cmd:这是Maven包装器(wrapper)脚本。借助这些脚本,即便你的机器上没有安装Maven,也可以构建项目。
  • TacoCloudApplication.java:这是Spring Boot主类,它会启动项目。
  • application.properties:默认配置文件,若同时存在 application.properties 和 application.yml 则会优先加载前者的配置,所以如果要使用 application.yml,必须删除 application.properties。
  • static:在这个文件夹下,你可以存放任意为浏览器提供服务的静态内容(图片、样式表、JavaScript等),该文件夹初始为空。
  • templates:这个文件夹中存放用来渲染内容到浏览器的模板⽂件。这个文件夹初始是空的,不过我们很快就会往里面添加Thymeleaf模板。
  • TacoCloudApplicationTests.java:这是⼀个简单的测试类,它能确保Spring应用上下文可以成功加载。


4、生成的 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.7.9</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>sia</groupId>
    <artifactId>taco-cloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>taco-cloud</name>
    <description>Taco Cloud Example</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- Spring-Boot: thymeleaf(模板引擎) -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- Spring-Boot: web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- devtools:
            1. 应用自动重启
            2. 浏览器自动刷新(静态资源如js、图片、css等)和禁用模板缓存 
            3. 自动启用H2数据库
         -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!-- Spring-Boot: test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
                
        <!-- 通过以下依赖项来解决此问题,同时支持旧版 HTML 格式。因为代码 charset="UTF-8"> 这里没有关闭元标记。 -->              
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>                                      
        </dependency>               
        
        <!-- lombok: 自动代码生成 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        
        <!-- Spring-Boot: validation -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
  • spring-boot-starter-web : web 工程必须引入的 starter。

  • spring-boot-starter-thymeleaf : 使用 thymeleaf 模板引擎渲染网页。

  • spring-boot-devtools :为 Spring 开发人员提供的遍历的开发期工具,功能包括:

    • 代码变更后应用会自动重启;
    • 当面向浏览器的资源(如模板、JavaScript、css)等发生变化时,会自动刷新浏览器;
    • 自动禁用模板缓存;
    • 如果使用 H2 数据库,内置 H2 控制台。

    DevTools 在运行时,会在应用程序侧启动一个 LiveReload 服务器,浏览器也必须先安装 LiveReload 插件,这样就可以实现浏览器访问网页时,一些静态资源发生变化时,会自动刷新浏览器。

  • spring-boot-starter-test :为 Spring 程序提供编写单元测试支持的 starter。

  • spring-boot-starter-validation :校验网页提交的表单数据的合法性。

  • lombok :通过注解 POJO,使其不必写构造器、getter/setter。

  • nekohtml :使用 thymeleaf 模板时,若网页模板中的 xml 标签没有闭标签,可能会导致引擎解析异常,而加入本依赖可处理这种问题。

  • spring-boot-maven-plugin :maven 编译插件,功能包括:

    • 提供一个 Maven goal,允许通过 Maven 来运行应用;
    • 确保依赖的所有库都会包含在可执行 Jar 文件中,并且保证运行时在类路径下是可用的;
    • 在 Jar 中生成一个 manifest 文件,将引导类声明为可执行 Jar 的主类。


5、主类

package tacos;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class TacoCloudApplication {

 public static void main(String[] args) {
 SpringApplication.run(TacoCloudApplication.class, args);
 }

}

  使用 @SpringBootApplication 表示是程序主类,负责引导应用执行。主类的包名是 tacos,默认 tacos.* 的包里的类都会被扫描到,如果使用了 @Service、@Component、@Respository、@Controller 等注解,则会被自动注册为 bean,若包名不符合该规则,或者想显式指定包扫描,则指定注解的 scanBasePackages 属性即可。

  比如要增加对包 com.foo 进行扫描,则注解调整为:

@SpringBootApplication(scanBasePackages = {"tacos", "com.foo"})</pre>



6、处理 Web 请求

  Spring 自带了一个 Web 开发框架 Spring MVC。Spring MVC 的核心是控制器的理念,控制器是处理请求并以某种方式进行信息相应的类。

  这里定义一个控制器,处理浏览器的 "/" 请求。

package tacos;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "home";
    }
    
}

   @Controller 表示这是一个控制器,可以响应处理浏览器请求;@GetMapping("/") 表示只响应对 "/" 发起的 GET 请求;方法返回值是一个字符串 "home",不代表直接返回这个字符串响应,而是表示要使用哪个视图,这个值会被解析为视图的逻辑名,Spring 会从资源目录(src/main/resources/templates)下找到对应的视图文件 home.html,内容如下:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>Taco Cloud</title>
    </head>
    <body>
        <h1>Welcome to...</h1>
        <img th:src="@{/images/TacoCloud.png}"></img>
        <br>
        <a href="/design">Start to design you taco!</a><br>
        <a href="/valid-design">Start to design you taco! (With validation)</a>
    </body>
</html>

  除了静态的 HTML,这里还使用了 thymeleaf 模板引擎,可以用它来引用资源渲染数据,作用类似于 JSP。

  启动容器,Boot Dashboard 可以看到 Spring Boot 项目列表,启动的应用会变绿,显示使用了 devtools,应用监听 8080 端口,上面的工具栏可以停止、重启、运行、调试应用,可以为应用打开一个 web 浏览器和控制台等。

  先点击启动,再点击浏览器,访问效果如下

【演示项目github地址】

https://github.com/huyihao/Spring-Tutorial/tree/main/2%E3%80%81SpringBoot/taco-cloud

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容