Springboot基础知识(20)- spring-boot-starter-web | 基于 Gradle 的 Springboot Web 项目

 

Spring Boot 是在 Spring 的基础上创建一款开源框架,它提供了 spring-boot-starter-web(Web 启动器) 来为 Web 开发予以支持。spring-boot-starter-web 为我们提供了嵌入的 Servlet 容器以及 SpringMVC 的依赖,并为 Spring MVC 提供了大量自动配置,可以适用于大多数 Web 开发场景。

Gradle 是一个开源自动化构建工具,它的核心基于 Groovy 的丰富而可扩展的域描述语言(DSL),而不是基于可扩展的标记语言(XML)来定义构建脚本。

Gradle 是 Android 的官方构建工具,它提供了与多种开发工具和服务器的集成,包括 Eclipse,IntelliJ,Jenkins 和Android Studio。

Gradle:https://gradle.org/


在 “ Springboot基础知识(08)- spring-boot-starter-web(Web启动器)” 里创建了基于 Maven 的 Springboot Web 项目,本文基于 Gradle 创建一个 Springboot Web 项目。

1. 创建 Java 项目

    1) 系统环境

        Spring Boot 版本及其环境配置要求如下表。

            Spring Boot     2.x
            JDK             8.0 及以上版本
            Gradle          7.x
            IntelliJ IDEA     14.0 以上

        本文将在 Windows 下使用 IntelliJ IDEA 和 Gradle 创建 Java 项目,在开始之前,确保已经正确搭建了 Spring 开发环境,参考 “ Spring基础知识(1)- Spring简介、Spring体系结构和开发环境配置 ”。

            Windows 版本 : Windows 10 Home (20H2)   
            IntelliJ IDEA:Community Edition for Windows 2020.1.4
            Gradle:7.0

        Gradle 的安装配置,参考 “ Maven基础知识(12)- Gradle 简介、Gradle 安装配置、创建 Java 项目 ”。本文 Gradle 7.0 的安装路径是 C:\Applications\Java\gradle-7.0,grade 工作目录 C:/Applications/Java/gradle-rep,修改 IDEA 的 Gradle 配置如下:

            IDEA 菜单 File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle

                Gradle User Home: C:/Applications/Java/gradle-rep

                Use Gradel from: Specified location -> C:/Applications/Java/gradle-7.0 

    2) 运行 IDEA 创建项目 

        点击菜单 New 创建 Project:
        
        New Project -> Project Type: Gradle -> Additional Libraries and Frameworks: Java -> Next
        
            Name: SpringbootWebGradle
            GroupId: com.example
            ArtifactId: SpringbootWebGradle

        -> Finish

    3) 生成的项目目录结构和文件

        (1) 目录结构

            SpringbootWebGradle
                |- gradle
                |   |- wrapper
                |       |- gradle-wrapper.jar
                |       |- gradle-wrapper.properties
                |- src
                |   |- main
                |   |    |- java
                |   |    |- resources
                |   |
                |   |- test
                |        |- java
                |        |- resources
                |
                |- build.gradle
                |- settings.gradle
                |- gradlew
                |- gradlew.bat


            目录及文件说明:

                src/main/java:用于存放项目的 Java 文件;
                src/main/resources: 用于存放项目的资源文件;
                src/test/java:用于存放所有测试 Java 文件,如 JUnit 测试类;
                gradle:Gradle wrapper 的 jar 文件和配置文件;
                gradlew, gradlew.bat: Gradle wrapper 启动脚本;
                build.gradle: 构建文件;
                settings.gradle:Gradle 项目核心配置文件。

        (2) build.gradle 文件

            plugins {
                id 'java'
            }

            group 'com.example'
            version '1.0-SNAPSHOT'

            repositories {
                mavenCentral()
            }

            dependencies {
                testCompile group: 'junit', name: 'junit', version: '4.12'
            }


        (3) settings.gradle 文件

            rootProject.name = 'SpringbootWebGradle'


2. 配置 Springboot Web

    1) 修改 build.gradle 文件

        plugins {
            id 'java'
            id 'org.springframework.boot' version '2.6.6'
            id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        }

        group 'com.example'
        version '1.0-SNAPSHOT'

        repositories {
            mavenLocal()
            mavenCentral()
        }

        dependencies {
            implementation 'org.springframework.boot:spring-boot-starter-web'
            implementation 'org.springframework.boot:spring-boot-starter-tomcat'
            testImplementation 'org.springframework.boot:spring-boot-starter-test'
        }
        


        使用 spring-boot-starter-tomcat 将 tomcat 内嵌到 web 项目中,打包成 jar 后可以直接用 Java 命令行运行,不需要再部署到额外的 tomcat 服务器上。

        也可以使用 Jetty 代替 Tomcat,两者不能同时内嵌,使用 Jetty 可用如下配置代码代替 Tomcat 的配置代码:

            implementation 'org.springframework.boot:spring-boot-starter-jetty'

        IDEA 菜单 View -> Tools Window -> Gradle -> 在 “SpringbootWebGradle” 点击鼠标右键 -> Reload Gradle Project


    2) 创建 src/main/java/com/example/App.java 文件

        package com.example;

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

        @SpringBootApplication
        public class App {
            public static void main(String[] args) {
                SpringApplication.run(App.class, args);
                System.out.println("Springboot web gradle");
            }
        }


    3) 创建 src/main/java/com/example/ServletInitializer.java 文件

        package com.example;

        import org.springframework.boot.builder.SpringApplicationBuilder;
        import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

        public class ServletInitializer extends SpringBootServletInitializer {

            @Override
            protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
                return application.sources(App.class);
            }

        }


    4) 创建 src/main/java/com/example/controller/IndexController.java 文件

        package com.example.controller;

        import org.springframework.stereotype.Controller;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.ResponseBody;

        @Controller
        public class IndexController {
            @ResponseBody
            @RequestMapping("/hello")
            public String hello() {
                return "Hello page";
            }
        }

        注: src/main/java/com/example/controller 目录不存在,手动创建各级目录,下同。

    5) 创建 src/main/resources/application.properties 文件

        spring.main.banner-mode=off

        # Web server
        server.display-name=SpringbootWebGradle
        server.address=localhost
        server.port=9090

    6) 运行

        (1) Run App.main()

            Open App.java, click mouse right button, select Run "App.main()"

        (2) Edit Configurations

            Click "+" add new configuration -> Select "Gradle"
                Gradle Project: SpringbootWebGradle (click button to select a project)
                Tasks: clean bootRun
                Name: SpringbootWebGradle [clean bootRun]
            -> Apply / OK

        Click Run "SpringbootWebGradle [clean bootRun]"

            ...

            Springboot web gradle        

        访问 http://localhost:9090/hello

            Hello page
            

        注:以上都是在 IDEA 英文版上的操作。jar 打包可以将 Tasks 改成 clean bootJar 或 clean jar。


3. 打包

    1) jar 打包

        (1) bootJar

            菜单 View -> Tool Windows -> Gradle -> SpringbootWebGradle -> Tasks -> build -> bootJar(鼠标左键双击)  

            jar 包生成在目录 build/libs 里

                SpringbootWebGradle-1.0-SNAPSHOT.jar

            注:SpringbootWebGradle-1.0-SNAPSHOT.jar 包含依赖包,可以直接运行。

        (2) jar

            菜单 View -> Tool Windows -> Gradle -> SpringbootWebGradle -> Tasks -> build -> jar(鼠标左键双击)

            jar 包生成在目录 build/libs 里

                SpringbootWebGradle-1.0-SNAPSHOT-plain.jar

            注:SpringbootWebGradle-1.0-SNAPSHOT-plain.jar 不包含依赖包,无法直接运行。

        (3) 运行

            点击 IDEA 底部 Terminal 标签页,执行如下命令。

            $ java -jar build/libs/SpringbootWebGradle-1.0-SNAPSHOT.jar

                ...

                Springboot web gradle    

            访问 http://localhost:9090/hello,页面显示:

                Hello page

    2) war 打包

        (1) 修改 build.gradle

            plugins {
                id 'java'
                id 'org.springframework.boot' version '2.6.6'
                id 'io.spring.dependency-management' version '1.0.11.RELEASE'
                id 'war'
            }

            war {
                archiveFileName = 'SpringbootWebGradle.war'
                //archiveName = 'SpringbootWebGradle.war'
            }

            ...


            注:添加 war 插件,使用 archiveFileName 指定输出的包名,archiveName 已不推荐使用(废弃)。

            IDEA 菜单 View -> Tools Window -> Gradle -> 在 “SpringbootWebGradle” 点击鼠标右键 -> Reload Gradle Project
        
        (2) war

            菜单 View -> Tool Windows -> Gradle -> SpringbootWebGradle -> Tasks -> build -> war(鼠标左键双击)

            war 包生成在目录 build/libs 里

                SpringbootWebGradle.war

        (3) 运行

            把 SpringbootWebGradle.war 复制到独立运行的 Tomcat 下 webapp 目录,默认设置的 Tomcat 运行在 8080 端口。

            Tomcat 会自动解压 SpringbootWebGradle.war,在 webapp 下产生 SpringbootWebGradle 目录,访问 http://localhost:8080/SpringbootWebGradle/hello ,页面显示:

                Hello page


posted @ 2023-03-08 12:04  垄山小站  阅读(1478)  评论(0)    收藏  举报