1. 程式人生 > >spring boot 整合springmvc檢視技術

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檢視