Spring Boot與Jsp
Spring Boot與Jsp
關於Spring Boot 與Jsp,
儘管本人已經很厭惡Jsp了。但是好多人在用,以後寫程式碼也需要,最近新學了SpringBoot框架,發現其與jsp結合不是太完美,現在把走過的坑說一下。
典型的spring Boot Web專案 加入jsp所需要的maven 依賴
專案結構
userController程式碼
在application.properties 中需加入
spring.mvc.view.prefix: /WEB-INF/jsp/
spring.mvc.view.suffix: .jsp
然後就在webapp/WEB-INF/jsp/*.jsp頁面
環境介紹到這
補一個知識點
依賴範圍(例子舉的很實際)
依賴範圍就是用來控制依賴和三種classpath(編譯classpath,測試classpath、執行classpath)的關係,Maven有如下幾種依賴範圍:
- compile:編譯依賴範圍。如果沒有指定,就會預設使用該依賴範圍。使用此依賴範圍的Maven依賴,對於編譯、測試、執行三種classpath都有效。典型的例子是spring-code,在編譯、測試和執行的時候都需要使用該依賴。
- test: 測試依賴範圍。使用次依賴範圍的Maven依賴,只對於測試classpath有效,在編譯主程式碼或者執行專案的使用時將無法使用此依賴。典型的例子是Jnuit,它只有在編譯測試程式碼及執行測試的時候才需要。
- provided:已提供依賴範圍。使用此依賴範圍的Maven依賴,對於編譯和測試classpath有效,但在執行時候無效。典型的例子是servlet-api,編譯和測試專案的時候需要該依賴,但在執行專案的時候,由於容器以及提供,就不需要Maven重複地引入一遍。
這裡主要是對
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope> 紅色部分不同
</dependency>
結論:無論如何, spring-boot:run 和 打包成 war 然後執行都是正常,其他都不正常
一、spring-boot:run 啟動方法:
1、兩下 Shift ,搜尋maven
2、選擇相應Module
(需注意:address 埠被佔用)
二、打成war 啟動方法:
1、設定pom.xml裡 packaging值為war
2、兩下Shift,搜尋maven ,跟springboot一樣
3、執行package打包
4、複製打成的war java –jar war名字執行就行
三、外接tomcat部署方法
1、確保<scope>provided</scope> 沒有被註釋
2、修改@SpringBootApplication註解的類,繼承一個SpringBootServletInitializer,然後實現其configure方法,具體內容為return builder.sources(本類類名.class);(注意,這裡不能是this,this是一個類的例項,而xxx.class是類的模板)
3、仿照上面打成war包的方法,打成war包
4、放在tomcat下的webapp目錄,可以直接改xxx.war的名字,然後瀏覽器輸入localhost/xxx就行了
(<build> <finalName>springBootJsp</finalName></bulid>) 也可以以這種方式改名字
FUCK 弄了半天,發現不註釋provided也行
到底原因在哪,Don't Know
總結:繼承了SpringBootServletInitializer,然後不註解provided,其生成的war包 jar 可以執行,springBoot:run 可以執行,tomcat外接也可以執行,Fuck