Spring Boot (Web 篇):支援JSP
目錄
第一種方式,SpringBoot直接啟動(內建整合tomcat)
前言
SpringBoot雖然支援JSP,但是官方不推薦使用,即:預設並不支援。最開始接觸動態頁面大多數人都是從JSP開始認識的,雖然真正開發中基本用不到了。但是還是要簡單的介紹一下,SpringBoot如何整合JSP頁面。
在pom.xml加入相關依賴
有一個很關鍵的關鍵點,就是tomcat-embed-jasper中scope必須是provided。
使用內嵌的tomcat容器來執行的話只要這3個就好了。這裡介紹下maven中scope依賴範圍的概念,因為後續涉及到這個會有問題。
依賴範圍就是用來控制依賴和三種classpath(編譯classpath,測試classpath、執行classpath)的關係,Maven有如下幾種依賴範圍:
-
compile:編譯依賴範圍。如果沒有指定,就會預設使用該依賴範圍。使用此依賴範圍的Maven依賴,對於編譯、測試、執行三種classpath都有效。典型的例子是spring-code,在編譯、測試和執行的時候都需要使用該依賴。
-
test: 測試依賴範圍。使用次依賴範圍的Maven依賴,只對於測試classpath有效,在編譯主程式碼或者執行專案的使用時將無法使用此依賴。典型的例子是Jnuit,它只有在編譯測試程式碼及執行測試的時候才需要。
-
provided:已提供依賴範圍。使用此依賴範圍的Maven依賴,對於編譯和測試classpath有效,但在執行時候無效。典型的例子是servlet-api,編譯和測試專案的時候需要該依賴,但在執行專案的時候,由於容器以及提供,就不需要Maven重複地引入一遍。
因為SpringBootServletInitializer需要依賴 javax.servlet,而tomcat-embed-jasper下面的tomcat-embed-core中就有這個javax.servlet,如果沒用provided,最終打好的war裡面會有servlet-api這個jar,這樣就會跟tomcat本身的衝突了。
配置application.properties
建立JSP頁面
SpringBoot利用工具搭建時,是沒有webAPP等目錄的,需要手動建立以下目錄:
Controller層
注意別加註解@ResponeBody 或者@RestController,控制層根據專案不同,註解不同,建議使用@Controller,不要使用@RestController,畢竟不是每一個方法都返回JSON的,有的需要跳轉到介面。
JSP頁面
${search}為jstl,在以後的FreeMark同樣適用
專案啟動
第一種方式,SpringBoot直接啟動(內建整合tomcat)
瀏覽器訪問
在瀏覽器直接輸入:http://localhost:8080/index/helloJSP
第二種方式,打包成部署的 war 包(外接tomcat)
在pom.xml加入相關依賴
在這裡需要移除對嵌入式Tomcat的依賴,這樣打出的war包中,在lib目錄下才不會包含Tomcat相關的jar包,否則將會出現啟動錯誤。
配置啟動項
讓 SpringbootApplication 類繼承 SpringBootServletInitializer 並重寫 configure 方法,如下:
在pom.xml加入相關依賴
修改 pom.xml 檔案,將 jar 改成 war,如下:
新增外接 tomcat
Maven打包
當然,如果對於yml,xml,properties等 類似於 配置的檔案,每次有改動都要重新打包,對於clean是為了清除快取,
٩(๑>◡<๑)۶ 對於我,還是比較喜歡SpringBoot方式啟動,雞肋~
打包成功後,一般會在專案中target中預設存放:
將 war 包部署到 tomcat 容器中執行即可。
瀏覽器訪問
在瀏覽器直接輸入:http://localhost:8080/index/helloJSP,
當然可以直接在tomcat配置首頁地址為:http://localhost:8080/index/helloJSP
當然外接 tomcat 也可以選擇熱部署,類似於SpringBoot熱部署:https://blog.csdn.net/Soinice/article/details/82416043
配置完成後,啟動tomcat會自動開啟瀏覽器,並訪問配置的首頁
總結
我相信全網都找不到一篇有我這篇這麼詳細的介紹Spring Boot使用jsp的文章。有很多人問我,為什麼我的很多文章這麼簡單易懂,我每次都是哭著回覆他們四個字:主題閱讀,天知道我參考了多少篇網上的文章,外加多少本相關書籍中關於這個章節的內容,反覆對比提煉,最後才產出對應的博文。說真的,我很羨慕你們在這個資訊爆炸的時代,剛好看到一篇自己要學習的技術的好文章,少走多少彎路。
原始碼下載
[相關示例完整程式碼]請獲取 相關分支哦:feature-20180910-web