譯:7.使用Spring MVC服務Web內容

本指南向您介紹了使用Spring建立「hello world」網站的過程。閱讀原文:Serving Web Content with Spring MVChtml

 1. 你將會構建什麼?

您將構建一個具備靜態主頁的應用程序,而且還將在如下位置接受HTTP GET請求:java

http://localhost:8080/greeting

 並用顯示HTML的網頁進行響應。 HTML的主體包含一個問候語:git

  "Hello, World!"github

 您可使用查詢字符串中的可選名稱參數來自定義問候語:web

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

名稱參數值覆蓋「World」的默認值,並反映在響應中:
"Hello, User!"

2. 你須要準備什麼?

3. 如何實現這個指南?

像大多數Spring入門指南同樣,您能夠從頭開始並完成每一個步驟,也能夠繞過已熟悉的基本設置步驟。 不管哪一種方式,你最終獲得工做代碼。

1. 打開STS,New ————> Import Spring Getting Started Content

2. 輸入servi ,搜索找到Serving Web Content

 Tips: Build Type 選擇Maven, Code Sets 所有勾選,由於這樣能夠同時生成完成後的點和空的項目,方便咱們學習。

3. 建立一個Web Controller

在Spring構建網站的方法中,HTTP請求由控制器處理。

您能夠經過@Controller註釋輕鬆識別這些請求。 在如下示例中,GreetingController經過返回View的名稱(在本例中爲「greeting」)來處理/ greeting的GET請求。 視圖負責呈現HTML內容:

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";
    }

}

這個控制器簡潔明瞭,但有不少事情要作。 讓咱們一步一步分解它。

@GetMapping註釋可確保將/ GET的HTTP GET請求映射到greeting()方法。

@RequestParam將查詢字符串參數名稱的值綁定到greeting()方法的name參數中。 此查詢字符串參數不是必需的; 若是請求中缺失,則使用「World」的缺省值。 name參數的值被添加到Model對象,最終使其能夠被視圖模板訪問。

方法體的實現依賴於視圖技術,在這種狀況下是Thymeleaf,執行HTML的服務器端呈現。 Thymeleaf解析下面的greeting.html模板並評估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>

 4.開發Web應用程序

開發Web應用程序的一個常見功能是對變動進行編碼,從新啓動應用程序,並刷新瀏覽器以查看更改。 整個過程可能會耗費不少時間。 爲了加速事情的循環,Spring Boot附帶了一個稱爲spring-boot-devtools的方便模塊。

啓用熱交換

切換模板引擎以禁用緩存

使LiveReload可以自動刷新瀏覽器

其餘基於開發而非生產的合理違約

5. 使應用程序變得可執行

雖然能夠將此服務做爲傳統WAR文件打包以部署到外部應用程序服務器,但下面演示的更簡單的方法會建立獨立應用程序。 您將全部內容打包到一個單獨的,可執行的JAR文件中,由一個良好的舊Java main()方法驅動。 一路上,您使用Spring的支持將Tomcat servlet容器做爲HTTP運行時嵌入,而不是部署到外部實例。

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是一個方便的註釋,它增長了如下全部內容:

  • @Configuration將類標記爲應用程序上下文的bean定義的來源。
  • @EnableAutoConfiguration通知Spring Boot根據類路徑設置,其餘bean和各類屬性設置開始添加bean。
  • 一般你會爲Spring MVC應用程序添加@EnableWebMvc,但Spring Boot在類路徑中看到spring-webmvc時會自動添加。這將該應用程序標記爲Web應用程序並激活關鍵行爲,例如設置DispatcherServlet。
  • @ComponentScan告訴Spring在hello包中查找其餘組件,配置和服務,以便找到控制器。

main()方法使用Spring Boot的SpringApplication.run()方法啓動應用程序。你有沒有注意到沒有一行XML?沒有web.xml文件。這個Web應用程序是100%純Java,您沒必要處理配置任何管道或基礎設施。

6. 編譯出一個可執行的Jar

您可使用Gradle或Maven從命令行運行應用程序。 或者您能夠構建一個包含全部必需的依賴項,類和資源的可執行JAR文件,並運行該文件。 這使得在整個開發生命週期內跨越不一樣環境等,將服務做爲應用程序發佈,版本化和部署變得很是容易。

若是您正在使用Gradle,則可使用./gradlew bootRun運行該應用程序。 或者您可使用./gradlew構建構建JAR文件。 而後你能夠運行JAR文件:

java -jar build/libs/gs-serving-web-content-0.1.0.jar

若是您使用的是Maven,則可使用./mvn spring-boot:run來運行該應用程序。 或者您可使用./mvn clean包構建JAR文件。 而後你能夠運行JAR文件:

java -jar target/gs-serving-web-content-0.1.0.jar

上述過程將建立一個可運行的JAR。 您也能夠選擇構建經典的WAR文件。

7.測試這個App

  如今該網站正在運行,請訪問  http://localhost:8080/greeting ,您會看到:
 
"Hello, World!"
如圖所示:

提供一個name查詢字符串參數經過 http://localhost:8080/greeting?name=User.

如今你注意到這個消息已經由 "Hello, World!" 改變成了 "Hello, User!"

"Hello, User!"

此更改演示了GreetingController中的@RequestParam排列按預期工做。 name參數已被賦予默認值「World」,但始終能夠經過查詢字符串顯式覆蓋。

添加一個Home 頁面

像HTML或JavaScript或CSS這樣的靜態資源能夠很容易地從Spring Boot應用程序中提供,只需將它們放在源代碼的正確位置便可。 默認狀況下,Spring Boot以「/ static」(或「/ public」)的類路徑中的資源提供靜態內容。 index.html資源是特殊的,由於它用做「歡迎頁面」(若是它存在),這意味着它將做爲根資源提供,即在咱們的示例中爲http:// localhost:8080 /。 因此建立這個文件:

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>

而後當你重啓你的App你將會看到這個頁面在這個網址  http://localhost:8080/ 


恭喜! 你剛剛用Spring開發了一個網頁。
源碼: 點擊查看
相關文章
相關標籤/搜索