做者:享學Peter老師
Spring Boot
是一個很是棒的應用程序開發框架。大多數人可能會使用這個框架來建立基於Web
的應用程序 - MVC應用程序或基於RESTFul API
的應用程序。這些應用程序能夠部署到Docker容器中,成爲微服務。javascript
本教程將向同窗們展現使用Spring Boot建立基於Web應用程序的過程。它是一個獨立的Java應用程序。內置一個嵌入式Tomcat
服務器。能夠處理Web頁面的各類請求。對於新手來講,每一個新起項目,最困難的部分就是項目環境配置部分。但跟隨本教程,你將發現使用Spring Boot
建立web
項目與使用Spring v3 / v4 MVC
建立應用程序相比,簡直要簡單得不要不要的。php
在開始以前,先展現項目的目錄和文件結構:css
<base-dir>/src/main/java/org/hanbo/boot/app/controllers/HelloController.java
<base-dir>/src/main/java/org/hanbo/boot/app/App.java
<base-dir>/src/main/resources/application.properties
<base-dir>/src/main/resources/static/test.html
<base-dir>/src/main/resources/static/assets/css/index.css
<base-dir>/src/main/resources/static/assets/js/test.js
<base-dir>/src/main/webapp/WEB-INF/jsp/testme.jsp
複製代碼
兩個Java文件。一個是程序入口類。另外一個是MVC控制器。
一個properties屬性文件,裏面是一些項目配置值。
三個靜態文件,可在請求時直接提供給用戶。
一個JSP文件,用做MVC應用程序的視圖模板。
若是咱們使用springmvc的舊方法來配置web項目,則須要在項目web.xml
裏配置spring
容器和spring mvc
容器,這至少須要兩個pring xml
配置文件。而在這裏,一切都使用Java註釋來進行配置。html
讓咱們從POM XML
文件開始。POM XML
文件用於Maven
構建。它指定了如何編譯和打包項目。如下是此文件的內容:java
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>boot-war</artifactId>
<packaging>war</packaging>
<name>Hanbo Boot War Sample App</name>
<description>An example of Spring Boot, JSP and WAR</description>
<version>1.0.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
複製代碼
這個POM
文件有幾個重要的事情。第一個是指定maven
構建將建立WAR
存檔的行:web
<packaging>war</packaging>
複製代碼
第二個是POM
文件具備父POM
依賴性。這容許下載許多Spring
和非Spring
依賴項並將其連接到此項目中:spring
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
複製代碼
三個是將Java
編譯設置爲使用JDK 1.8
的屬性定義:apache
<properties>
<java.version>1.8</java.version>
</properties>
複製代碼
最後一個是使用Spring Boot maven
插件進行編譯和打包:瀏覽器
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
複製代碼
依賴項部分定義了此應用程序所需的額外依賴項。我須要的是Spring MVC
,並做爲J2EE Web
應用程序運行。添加的依賴項用於編譯JSP
視圖和運行嵌入式應用程序服務器。tomcat
接下來,開始咱們程序編碼。spring boot
項目,程序都有必須有一個入口主類,如下是主類的完整源代碼:
package org.hanbo.boot.app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class App extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder appBuilder) {
return appBuilder.sources(App.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(App.class, args);
}
}
複製代碼
該App類從SpringBootServletInitializer
擴展而來。它能被Spring Framework
識別,並將類App做爲傳統的WAR包進行初始化和執行。它還告訴Spring Framework
將有WEB-INF
文件夾及其中的資源供使用。
在App類中,有一個名爲configure()的受保護方法。它用於指定任何特定於應用程序的配置。它只有一行,它接受App類的類型並建立一個SpringApplicationBuilder
對象並返回。這樣作的是,建立的SpringApplicationBuilder
對象將自動掃描App
類,它所在的包,以及任何帶註釋的類的子包,以及包含Spring
配置的註釋。而後它將基於這些配置構建Spring
應用程序。這是按慣例進行集成的典型示例。而且一切都經過依賴注入耦合。
靜態main方法
只有一行,它將類App的類型和任何其餘命令行參數傳遞給SpringApplication.run()
。在幕後,這門課作了不少。它將隱式地對當前包和全部子包進行組件掃描。若是須要,開發人員還能夠添加其它路徑包爲掃描目標。開發人員能夠爲所需的任何其餘配置添加額外的註釋。對於這個簡單的程序,只有MVC控制器類能夠處理用戶對頁面的請求。
接下來是咱們的MVC
控制器類。這是一個很是簡單的類,只有一個方法能夠處理來自用戶的HTTP GET
請求,並帶有一些查詢參數。它經過使用JSP
頁面做爲視圖來響應。源代碼以下:
package org.hanbo.boot.app.controllers;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
@RequestMapping(value = "/meow", method = RequestMethod.GET)
public ModelAndView hello(@RequestParam("sayit") String sayit) {
ModelAndView retVal = new ModelAndView();
retVal.setViewName("testme");
retVal.addObject("mymessage", sayit);
return retVal;
}
}
複製代碼
類中代碼沒有什麼新鮮的。也就是說,該控制器類的定義與任何Spring MVC
控制器的定義相同。咱們簡單走讀一下類實現:
類用@controller
註釋:表示它是一個控制器類。
類只有一個方法來處理HTTP GET
請求。它用@requestmapping
註釋。註釋定義了請求的子路徑以及它能夠處理的http
方法get
請求。
方法建立一個ModelAndView
對象並返回。視圖頁面稱爲「testme」。數據模型只是一個將顯示在頁面上的字符串。
該方法接受一個參數,該參數來自查詢參數,稱爲「sayit」。
整個類的功能,就是當用戶在瀏覽器地址欄輸入如下路徑時,進行響應處理:
http://localhost:8080/meow?sayit=This+is+pretty+crazy
複製代碼
爲了讓這個控制器按預期工做,還須要一些額外的配置。它在application.properties
文件中完成。
application.properties
須要指定視圖模板文件的前綴和後綴。
若是您作過spring mvc
項目,或者你知道,web
項目須要建立和配置一個org.springframework.web.servlet.view.internalResourceViewResolver
類型的對象,而這個對象須要指定兩個屬性:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
複製代碼
意思是應用程序在「WEB-INF/JSP/」
文件夾中查找視圖模板。文件擴展名是「.jsp」
。
ok,如今咱們已經有了主程序入口類、控制器類和內部資源視圖解析器的設置。最後一塊是視圖模板。
本教程的視圖模板很是簡單,只有一個JSP文件演示如何顯示視圖模型中的數據:
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="en">
<head>
<c:url value="/assets/css/index.css" var="jstlCss"/>
<link href="${jstlCss}" rel="stylesheet"/>
</head>
<body>
<p>What did you say?</p>
<p>I said: <span class="text-underline">"${mymessage}."</span></p>
<script type="text/javascript" src="/assets/js/test.js"></script>
</body>
</html>
複製代碼
在這個JSP文件中,有三件事:
有級聯樣式表文件。它是一個靜態文件,經過JSTL
標記添加。這要求JSTL
庫已經正確地引入到了項目中。
視圖模型只有一個元素,並經過$mymessage
添加到視圖中。
在HTML內容的末尾添加了一個javascript
文件,加載後將執行該文件。這是爲了演示在這個項目中靜態文件的使用。
讓示例應用程序提供靜態內容是很是重要的。它提供了超越Spring MVC
的方法——靜態頁面和javascript
可用於單頁Web
應用程序。並且,使用Spring
引導很容易得到靜態內容,後面會再解釋這一點。
Spring Boot
提供了不少便利,讓開發人員可以快速上手開發。
這些便利是經過一個約定來實現的:
當您使用Spring Boot
開發的應用程序指定爲基於Web
的應用程序時,您所須要作的就是在src/main/resources
下建立一個名爲「static」
的文件夾。
在這個「靜態」文件夾中,只需根據須要添加任何子文件夾,並將任何靜態內容文件放入其中,就能夠爲它們提供服務。以本案例程序爲例,我有三個指定爲靜態內容的文件:
級聯樣式表的文件——src/resources/static/assets/css/index.css
一個javascript文件——src/resources/static/assets/js/test.js
一個HTML文件——src/resources/static/test.html
那麼,用戶如何經過瀏覽器訪問這些靜態內容呢?這很容易。假設應用程序正在運行,而且假設應用程序運行的網站的URL是http://localhost:8080/(在這沒有特定的應用程序上下文),那麼用戶可使用如下URL查看這些靜態內容文件的實際內容:
http://localhost:8080/assets/js/test.js
http://localhost:8080/assets/css/index.css.
http://localhost:8080/assets/test.html.
有一些方法能夠配置Spring
引導應用程序在其餘位置查找靜態內容文件,WEB-INF
和JSP
位置也是如此,應用程序如何初始化,以及Spring
引導應用程序如何工做的許多其餘方面。這些不是本教程中討論的主題,可是若是你對Spring Boot
有足夠的瞭解,這些主題就微不足道了。我可能會在之後的文章中介紹其中的一些。
在構建項目以前,請轉到src/main/resources/static/assets/js
文件夾,並將文件「test.sj」
重命名爲「test.js」
。
要構建此應用程序,請在命令行控制檯中運行如下命令:
mvn clean install
複製代碼
當您第一次運行此應用程序時,它將下載用於構建此應用程序的全部依賴項,這可能須要一些時間。以後,後續的構建將花費更少的時間。
要運行Web
應用程序,還可使用命令行控制檯:
java -jar target\boot-war-1.0.0.war
複製代碼
若是一切順利,而且您能夠構建應用程序,那麼執行將在最後輸出相似這樣的結果:
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.0.5.RELEASE) 2018-10-14 22:51:11.356 INFO 6124 --- [ main] org.hanbo.boot.app.App : Starting App v1.0.0 on U3DTEST-PC with PID 6124 (C:\Users\u3dadmin\workspace-mars8\SpringBootJspWar\target\boot-war-1.0.0.war started by u3dadmin in C:\Users\u3dadmin\workspace-mars8\SpringBootJspWar) .... .... .... 2018-10-14 22:51:28.730 INFO 6124 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2018-10-14 22:51:28.745 INFO 6124 --- [ main] org.hanbo.boot.app.App : Started App in 20.84 seconds (JVM running for 23.398) 複製代碼
正如我以前提到的,使用Spring
引導建立Web
應用程序很是簡單、方便。這種便利性的關鍵是去掉全部雜亂無章的配置,這樣人們就能夠專一於開發過程當中最重要的部分,設計出符合最終產品願景的產品。除此以外,Spring Boot
還有一個很酷的地方,那就是它能夠快速部署到Docker
虛擬機中。所以,它很是適合開發微服務。
那麼,接下來的即是編寫那些更加複雜的關於Spring的工做,例如數據訪問、身份驗證和受權。敬請期待。
END
歡迎長按下圖關注公衆號:享學課堂online!
公衆號後臺回覆【java】,獲取精選準備的架構學習資料(視頻+文檔+架構筆記)