SpringBoot第十二篇:整合jsp
作者:追夢1819
原文:https://www.cnblogs.com/yanfei1819/p/10953600.html
版權宣告:本文為博主原創文章,轉載請附上博文連結!
引言
SpringBoot 雖然官方推薦使用 thymelaf 模板引擎,但是也支援jsp,只不過需要做一些修改。本文將講解 JSP 在 SpringBoot 中的應用。
說句題外話,本章的話題,比較複雜,也寫得比較累。因為 SpringBoot 並不推薦使用 JSP。據我的瞭解,SpringBoot 和 JSP 整合的專案少之又少。從而,網上這方面的資料比較少。已經存在的資源,內容基本上都是亂七八糟,或者是遠離主題的一些東西。
本章在理解的基礎上,做了一一求證,希望不會誤導讀者,浪費讀者的時間。同時,有更加了解這一塊的讀者,歡迎聯絡作者一起交流交流。
版本資訊
- JDK:1.8
- SpringBoot :2.1.4.RELEASE
- maven:3.3.9
- 外部Tomcat : 9.0
- IDEA:2019.1.1
使用內嵌Tomcat
建立專案,我們先看看專案的結構:
首先,引入 maven 依賴:
<!--對 web 的支援--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--解析jsp--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> <!--jstl標籤--> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <scope>provided</scope> </dependency>
注意,跟 jsp 相關的兩個依賴將其設定為 <scope>provided</scope>
。這裡我們講解一下 scope 的概念:
依賴範圍就是用來控制依賴和三種classpath(編譯classpath,測試classpath、執行classpath)的關係,Maven有如下幾種依賴範圍:
- compile:編譯依賴範圍。如果沒有指定,就會預設使用該依賴範圍。使用此依賴範圍的Maven依賴,對於編譯、測試、執行三種classpath都有效。典型的例子是spring-code,在編譯、測試和執行的時候都需要使用該依賴;
- test: 測試依賴範圍。使用次依賴範圍的Maven依賴,只對於測試classpath有效,在編譯主程式碼或者執行專案的使用時將無法使用此依賴。典型的例子是Jnuit,它只有在編譯測試程式碼及執行測試的時候才需要;
- provided:已提供依賴範圍。使用此依賴範圍的Maven依賴,對於編譯和測試classpath有效,但在執行時候無效。典型的例子是servlet-api,編譯和測試專案的時候需要該依賴,但在執行專案的時候,由於容器以及提供,就不需要Maven重複地引入一遍。
其次,需要在配置檔案 application.properties 中配置SpringBoot 對 jsp 的支援,SpringBoot 預設不支援 jsp。
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
然後,建立測試介面:
@Controller
public class JSPController {
@RequestMapping(value = "/index",method = RequestMethod.GET)
public String index(Model model){
model.addAttribute("name","SpringBoot");
return "index";
}
}
啟動類不變:
@SpringBootApplication
public class JspDemoApplication {
public static void main(String[] args) {
SpringApplication.run(JspDemoApplication.class, args);
}
}
最後,需要注意的是,要執行的是 war,而不是 jar,因為 jar 預設不會將 jsp 複製進去。故,我們需要在 pom.xml 檔案中,修改包的型別:
<packaging>jar</packaging>
修改為 <packaging>war</packaging>
。
啟動時要注意,專案打包方式是war包,不要通過 main 方法啟動。這裡用的容器是SpringBoot 內嵌的Tomcat,可以進入 war 包的目錄下,通過命令啟動:java -jar xxx.war
,訪問 http://localhost:8082/index
,可以得到對應的頁面。
外部容器
使用外部的 Tomcat 容器時,不能直接部署上面的 war 包,需要對以上程式進行改造。
1、修改啟動類
整合 SpringBootServletInitializer ,並繼承以下方法:
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(DemoApplication.class);
}
外部容器是以類似於web.xml檔案配置的方式來啟動Spring應用上下文,並非 main 函式。以上的的改造類似在web.xml中配置負責初始化Spring應用上下文的監聽器。
2、修改相關的依賴
專案部署在外部容器中,會與內嵌的 Tomcat 衝突,需要解決,不然啟動會報錯。本文列舉兩個解決方案:
1) 移出內嵌的 Tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
並將解析 jsp 的 jar 包 scope 設定為 provided,即:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
2) 新增以下依賴(推薦)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
作者推薦這種解決方案,它同時適合命令列啟動,以及部署到外部容器中。
總結
本文是分析 SpringBoot 中使用 JSP。JSP相對於模板引擎來說,效能更好。但是,儘管如此,作者並不推薦這種做法,而儘量使用模板引擎 Thymelaf。不瞭解的讀者可以閱讀上一章。
相關推薦
SpringBoot第十二篇:整合jsp
作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/10953600.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 引言 SpringBoot 雖然官方推薦使用 thymelaf 模板引擎,但是也支援jsp,只不過需要做一些修改。本文將講解
一起來學SpringBoot | 第十一篇:整合Swagger線上除錯
SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 隨著網際網路技
第十二篇:HTML基礎
項目 logs 瀏覽器 圖片 handle 標題欄 width light 標題 本篇內容 HTML概述 HTML常用基本標簽 CSS格式引入 一、 HTML概述 1.定義: HTML,超文本標記語言,寫給瀏覽器的語言,目前網絡上應用最廣泛的語言。HTML也在不斷
第十二篇:數據庫操作
mysq 查詢 alc mys clas 多對多 class 操作 連接查詢 一、數據庫簡紹 二、mysql 增刪改查 三、mysql 外鍵關聯 四、mysql 連接查詢 五、mysql 事務與索引 六、ORM 簡紹 七、sqlalchemy 常用語法 八、sqlalche
史上最簡單的SpringCloud教程 | 第十二篇: 斷路器監控(Hystrix Dashboard)
詳細 pre 良好的 依次 alt ews 需要 ext 數據監控 最新Finchley版本,請訪問:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f12-dash/或者http://blog.csdn.net
第十二篇:隨手記一下javaBean的setter,getter方法的命名問題
今天測試新寫的一個系統表的完整Ibatis配置和呼叫,因為經驗少,到處撞牆、、、其他的坑爹問題就不提了 測試sqlMapClient.queryForList("...",param)這個方法,查詢正常有3條記錄,但是結果卻是[
SpringBoot | 第十二章:給大家推薦8個SpringBoot精選專案
專案一: 支付服務 簡介:支付服務:支付寶、微信、銀聯詳細 程式碼案例,目前已經1800+Star。十分鐘讓你快速搭建一個支付服務,內附各種教程。 專案地址: https://gitee.com/52itstyle/spring-boot-pay &nbs
Spring Boot 基礎系列教程 | 第十二篇:使用Spring-data-jpa簡化資料訪問層(推薦)
推薦 Spring Boot/Cloud 視訊: Spring Boot中使用Spring-data-jpa讓資料訪問更簡單、更優雅 在上一篇Spring中使用JdbcTemplate訪問資料庫 中介紹了一種基本的資料訪問方式,結合構建RESTful API和
Spring Boot 基礎系列教程 | 第十六篇:整合MyBatis
推薦 Spring Boot/Cloud 視訊: 最近專案原因可能會繼續開始使用MyBatis,已經習慣於spring-data的風格,再回頭看xml的對映配置總覺得不是特別舒服,介面定義與對映離散在不同檔案中,使得閱讀起來並不是特別方便。 Spring中整合
卜若的程式碼筆記系列-Web系列-SpringBoot-第十二章:Swagger的批註詳解-3212
1. @ApiOperation("swaggerTest") 用來描述當前的api的簡略資訊 我來解釋下為什麼會出現這麼多比如DELETE,GET,HEAED啥的請求,因為swagger預設將所有請求全部顯示出來,為了解決這種情況,我們其實可以將這個api單獨
一起來學SpringBoot | 第十四篇:強大的 actuator 服務監控與管理
SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 actuato
第十二篇:Spring Boot之使用Spring RestTemplate訪問Rest服務
RestTemplate是Spring3.0後開始提供的用於訪問 Rest 服務的輕量級客戶端,相較於傳統的HttpURLConnection、Apache HttpClient、OkHttp等框架,RestTemplate大大簡化了發起HTTP請求以及處理響應的過程。這篇文章主要介紹怎
【SSH三大框架】Hibernate基礎第十二篇:load()懶載入分析以及一對一、一對多、多對一、多對多懶載入的分析
一、懶載入的定義: 懶載入:在WEB應用程式中,經常會需要查詢資料庫,系統的響應速度在很大程度上是與資料庫互動的響應。因此,如果能夠優化與資料庫的互動速度,則能夠大大提高WEB應用的響應速度。 例如:當有一個Student類和一個Teacher類。當我們載入一個學生的所有資
R實戰 第十二篇:隨機數
由R生成的隨機數實際上偽隨機數,也就是說,隨機數是由某種演算法而不是真正的隨機過程產生的,隨機數生成器需要一個初始值來生成數字,該初始值叫做種子。通過把種子設定為特定的值,可以保證每次運行同一段程式碼時都能生成相同的隨機數。 R使用set.seed(n)函式來設定種子值,n是一個正整數,不同的種子會生成不同
SM2演算法第十二篇:數字證書原理
作者:無恙 完美的邏輯,簡直碉堡了。學習學習,,,尊重原創,熱愛大神。 通過一段時間的學習,我漸漸地可以將好幾篇不同的部落格聯絡起來,對照著看,領會到各篇文章之間的交叉與獨到之處。 ---------------------------------------------
【屌絲程式的口才逆襲演講稿50篇】第十二篇:世界上最快的捷徑【張振華.Jack】
演講稿主題:《世界上最快的捷徑》 --作者:張振華Jack 給大家講個故事。 有一天正好猴子和鸚鵡坐同一架飛機去旅行。猴子向空姐說:“請來一瓶礦泉
OpenCV學習第十二篇:帶透明通道影象合成(縮放,旋轉,和ROI)
第一步:獲取素材圖片 Mat src, dst; src = imread("F:/識圖/底圖.PNG", 1); dst = imread("logo", -1); 【ps:這裡需要注意的是透明度圖片獲取,後面的引數帶-1】 第二
Spring Cloud Learning | 第十二篇:Docker部署Spring Cloud專案
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>sprin
一起來學SpringBoot | 第十五篇:actuator與spring-boot-admin 可以說的祕密
SpringBoot 是為了簡化 Spring 應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 一起來學Spr
一起來學SpringBoot | 第十九篇:輕鬆搞定資料驗證(一)
SpringBoot是為了簡化Spring應用的建立、執行、除錯、部署等一系列問題而誕生的產物,自動裝配的特性讓我們可以更好的關注業務本身而不是外部的XML配置,我們只需遵循規範,引入相關的依賴就可以輕易的搭建出一個 WEB 工程 對於任何一個