Spring Boot

今天來學習下spring boot。參考的是spring 官網的文檔:https://spring.io/guides/gs/serving-web-content/。閒話少說,按照提示一步步走起!css

What you’ll build(先給咱們展現一下咱們要作個什麼玩意)

You’ll build an application that has a static home page, and also will accept HTTP GET requests at:(一個有靜態首頁,能夠接受http的get請求)html

http://localhost:8080/greeting

and respond with a web page displaying HTML. The body of the HTML contains a greeting:(返回一個展現頁面,以下)java

"Hello, World!"

You can customize the greeting with an optional name parameter in the query string:(也能夠定製一個非必填的參數)git

http://localhost:8080/greeting?name=User

The name parameter value overrides the default value of "World" and is reflected in the response:(定製參數覆蓋了默認值,獲得的展現頁面以下)github

"Hello, User!"

What you’ll need(須要準備什麼環境)

  • About 15 minutes(15分鐘,我有)web

  • A favorite text editor or IDE(習慣使用IDEA)spring

  • JDK 1.8 or laterexpress

  • Gradle 4+ or Maven 3.2+(習慣使用maven)apache

  • You can also import the code straight into your IDE:api

  • How to complete this guide

    Like most Spring Getting Started guides, you can start from scratch and complete each step, or you can bypass basic setup steps that are already familiar to you. Either way, you end up with working code.

    To start from scratch, move on to Build with Gradle.

    To skip the basics, do the following:(我選這種)

  • Download and unzip the source repository for this guide, or clone it using Git:(下載代碼,兩種方式,一種是直接從官網下載壓縮文件,一種是直接從 github複製一個到本地,我選github) git clone https://github.com/spring-guides/gs-serving-web-content.git

  • 而後使用IDEA引入gs-serving-web-content\initial

  •  file/new/project from existing sources

  • 完成後目錄結構以下:

  • 骨架有了就開始填充血肉:

  • Create a web controller(先建立一個controller)

    In Spring’s approach to building web sites, HTTP requests are handled by a controller. You can easily identify these requests by the @Controller annotation. In the following example, the GreetingController handles GET requests for /greeting by returning the name of a View, in this case, "greeting". A View is responsible for rendering the HTML content(想要用spring來建立一個網站,http請求須要經過controller來處理。使用註解@Controller就能夠輕鬆定義請求的入口。下面代碼就是一個很好的例子,GreetingController 負責處理請求/greeting,而且返回一個頁面greeting):

  • src/main/java/hello/GreetingController.java

    package hello;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    @Controller
    public class GreetingController {
    
        @GetMapping("/greeting")
        public String greeting(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
            model.addAttribute("name", name);
            return "greeting";
        }
    
    }

    This controller is concise and simple, but there’s plenty going on. Let’s break it down step by step.

    The @GetMapping annotation ensures that HTTP GET requests to /greeting are mapped to the greeting() method(@GetMapping 註解確保/greeting請求被影射到了greeting()方法).

    @RequestParam binds the value of the query String parameter name into the name parameter of the greeting() method. This query String parameter is not required; if it is absent in the request, the defaultValue of "World" is used. The value of the name parameter is added to a Model object, ultimately making it accessible to the view template.(@RequestParam 註解把請求中的參數綁定到了方法中的參數。方法體比較簡單,就是給model注入一個屬性:name,這樣在前臺能夠拿到這個屬性) 

  • The implementation of the method body relies on a view technology, in this case Thymeleaf, to perform server-side rendering of the HTML. Thymeleaf parses the greeting.html template below and evaluates the th:text expression to render the value of the ${name} parameter that was set in the controller(前臺拿到後臺設置的參數是使用了thymeleaf這個前臺框架,thymeleaf幫咱們解析greeting.html,而且把後臺設置的name屬性賦值到表達式th:text 的 ${name} ).

    src/main/resources/templates/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>

     

  • Make the application executable(跑起來)

    Although it is possible to package this service as a traditional WAR file for deployment to an external application server, the simpler approach demonstrated below creates a standalone application. You package everything in a single, executable JAR file, driven by a good old Java main() method. Along the way, you use Spring’s support for embedding the Tomcat servlet container as the HTTP runtime, instead of deploying to an external instance(雖然能夠打個war,而後放到外部容器中啓動,可是還有一個更簡單的方法。由於spring提供了一個嵌入的tomcat,因此打一個jar,入口是一個main()也能行).

    src/main/java/hello/Application.java

    package hello;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
    }

    @SpringBootApplication is a convenience annotation that adds all of the following:(全家桶)

  • @Configuration tags the class as a source of bean definitions for the application context.

  • @EnableAutoConfiguration tells Spring Boot to start adding beans based on classpath settings, other beans, and various property settings.

  • Normally you would add @EnableWebMvc for a Spring MVC app, but Spring Boot adds it automatically when it sees spring-webmvc on the classpath. This flags the application as a web application and activates key behaviors such as setting up a DispatcherServlet.

  • @ComponentScan tells Spring to look for other components, configurations, and services in the hello package, allowing it to find the controllers.

  • Summary(總結一下)

    Congratulations! You have just developed a web page using Spring.

    The main() method uses Spring Boot’s SpringApplication.run() method to launch an application. Did you notice that there wasn’t a single line of XML? No web.xml file either. This web application is 100% pure Java and you didn’t have to deal with configuring any plumbing or infrastructure.(沒有web.xml的web應用,是否是很神奇?使用spring boot建立的應用是一個純java應用,不用管各類煩人的配置,這就是約定大約配置的魅力。)

    Build an executable JAR(構建一個可執行的JAR)

    You can run the application from the command line with Gradle or Maven. Or you can build a single executable JAR file that contains all the necessary dependencies, classes, and resources, and run that. This makes it easy to ship, version, and deploy the service as an application throughout the development lifecycle, across different environments, and so forth.(我用maven)

    If you are using Maven, you can run the application using ./mvnw spring-boot:run. (命令行啓動)

  • Or you can build the JAR file with ./mvnw clean package. Then you can run the JAR file:(或者現打包,而後運行jar)

    java -jar target/gs-serving-web-content-0.1.0.jar
      The procedure above will create a runnable JAR. You can also opt to build a classic WAR fileinstead.

    Logging output is displayed. The app should be up and running within a few seconds.

    Test the App(測試下)

    Now that the web site is running, visit http://localhost:8080/greeting, where you see:(無參數訪問,返回默認值)

    "Hello, World!"

    Provide a name query string parameter with http://localhost:8080/greeting?name=User. Notice how the message changes from "Hello, World!" to "Hello, User!":(有參數訪問,返回請求的參數)

    "Hello, User!"

    This change demonstrates that the @RequestParam arrangement in GreetingController is working as expected. The name parameter has been given a default value of "World", but can always be explicitly overridden through the query string.

  • Add a Home Page(加一個首頁)

    Static resources, like HTML or JavaScript or CSS, can easily be served from your Spring Boot application just be dropping them into the right place in the source code. By default Spring Boot serves static content from resources in the classpath at "/static" (or "/public"). The index.html resource is special because it is used as a "welcome page" if it exists, which means it will be served up as the root resource, i.e. at http://localhost:8080/ in our example. So create this file:(靜態資源,好比html、js、css直接扔到約定位置/static,就能夠生效。根頁面的名字也有約定-index.html,咱們在resources目錄下建一個static文件夾,而後在建立index.html 以下)

    src/main/resources/static/index.html

    <!DOCTYPE HTML>
    <html>
    <head>
        <title>Getting Started: Serving Web Content</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <p>Get your greeting <a href="/greeting">here</a></p>
    </body>
    </html>

    and when you restart the app you will see the HTML at http://localhost:8080/.

  • Summary

    Congratulations! You have just developed a web page using Spring.

我也來總結下,建議一步一步跟隨官網指導來作,使用gs-serving-web-content\initial,一點點填充,最後跑起來。若是遇到問題的話,對照gs-serving-web-content\complete看看,這個是完整版。

相關文章
相關標籤/搜索