spring boot 整合springmvc檢視技術
spring boot 在springmvc的檢視解析器方面就預設集成了ContentNegotiatingViewResolver和BeanNameViewResolver,在檢視引擎上就已經整合自動配置的模版引擎,如下:
1. FreeMarker
2. Groovy
3. Thymeleaf
4. Velocity (deprecated in 1.4)
6. Mustache
JSP技術spring boot 官方是不推薦的,原因有三:
1. 在tomcat上,jsp不能在巢狀的tomcat容器解析即不能在打包成可執行的jar的情況下解析
2. Jetty 巢狀的容器不支援jsp
3. Undertow
而其他的模版引擎spring boot 都支援,並預設會到classpath的templates裡面查詢模版引擎,這裡假如我們使用freemarker模版引擎
1.現在pom.xml啟動freemarker模版引擎檢視
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2.定義一個模版字尾是ftp,注意是在classpath的templates目錄下
3.在controller上返回檢視路徑
@RestController
@RequestMapping("/task")
public class TaskController {
@RequestMapping("/mvc1")
public ModelAndView mvc1() {
return new ModelAndView("index");
}
}
@RestController預設就會在每個方法上加上@Responsebody,方法返回值會直接被httpmessageconverter轉化,如果想直接返回檢視,需要直接指定modelAndView。
雖然,jsp技術,spring boot 官方不推薦,但考慮到是常用的技術,這裡也來整合下jsp技術
1.首先,需要在你專案上加上webapp標準的web專案資料夾
2.在配置檔案上配置,jsp的字首和字尾
spring.mvc.view.prefix=/WEB-INF/
spring.mvc.view.suffix=.jsp
3.然後直接在controller中返回檢視
@RestController
@RequestMapping("/task")
public class TaskController {
@RequestMapping("/mvc1")
public ModelAndView mvc1() {
return new ModelAndView("index");
}
}
這裡要注意,只能是打成war包在非巢狀的tomcat容器才能看到效果,直接在巢狀的tomcat容器是看不到效果的,因為不支援,例如在IDE直接右鍵run main函式或者打成可執行的jar包都不行。
例外,如果出現freemarker模版引擎和jsp技術同時存在的話,springmvc會根據解析器的優先順序來返回具體的檢視,預設,FreeMarkerViewResolver的優先順序大於InternalResourceViewResolver的優先順序,所以同時存在的話,會返回freemarker檢視