做者:追夢1819 原文:http://www.javashuo.com/article/p-ktqegxee-by.html 版權聲明:本文爲博主原創文章,轉載請附上博文連接! <br>html
SpringBoot 雖然官方推薦使用 thymelaf 模板引擎,可是也支持jsp,只不過須要作一些修改。本文將講解 JSP 在 SpringBoot 中的應用。java
說句題外話,本章的話題,比較複雜,也寫得比較累。由於 SpringBoot 並不推薦使用 JSP。據個人瞭解,SpringBoot 和 JSP 整合的項目少之又少。從而,網上這方面的資料比較少。已經存在的資源,內容基本上都是亂七八糟,或者是遠離主題的一些東西。git
本章在理解的基礎上,作了一一求證,但願不會誤導讀者,浪費讀者的時間。同時,有更加了解這一塊的讀者,歡迎聯繫做者一塊兒交流交流。github
<br>web
<br>spring
建立項目,咱們先看看項目的結構:apache
首先,引入 maven 依賴:api
<!--對 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 的概念:tomcat
依賴範圍就是用來控制依賴和三種classpath(編譯classpath,測試classpath、運行classpath)的關係,Maven有以下幾種依賴範圍:springboot
其次,須要在配置文件 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
,能夠獲得對應的頁面。
<br>
使用外部的 Tomcat 容器時,不能直接部署上面的 war 包,須要對以上程序進行改造。
一、修改啓動類
集成 SpringBootServletInitializer ,並繼承如下方法:
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(DemoApplication.class); }
外部容器是以相似於web.xml文件配置的方式來啓動Spring應用上下文,並不是 main 函數。以上的的改造相似在web.xml中配置負責初始化Spring應用上下文的監聽器。
二、修改相關的依賴
項目部署在外部容器中,會與內嵌的 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>
做者推薦這種解決方案,它同時適合命令行啓動,以及部署到外部容器中。
<br>
本文是分析 SpringBoot 中使用 JSP。JSP相對於模板引擎來講,性能更好。可是,儘管如此,做者並不推薦這種作法,而儘可能使用模板引擎 Thymelaf。不瞭解的讀者能夠閱讀上一章。 源碼:個人GitHub <br>
原文出處:https://www.cnblogs.com/yanfei1819/p/10953600.html