美文网首页Spring Boot
Spring Boot 之一:从一个小程序开始

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

作者: 小胡_鸭 | 来源:发表于2023-03-30 15:14 被阅读0次

    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

    相关文章

      网友评论

        本文标题:Spring Boot 之一:从一个小程序开始

        本文链接:https://www.haomeiwen.com/subject/bxccddtx.html