2016-01-25 78 views
0

我通過Spring引導啓動器(1.3.2)使用Spring MVC,並且我看到了關於使用哪個模板引擎的行爲差異。Spring MVC viewController具有不同的行爲,具體取決於模板引擎

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     // template file 
     registry.addViewController("/index").setViewName("index"); 
     // static file 
     registry.addViewController("/login").setViewName("login.html"); 
    } 
} 

如果我用Freemarker作爲模板引擎,Spring MVC的會從resources/static文件進行/login,並在resources/templates/index

然而,如果我用Thymeleaf作爲模板引擎,Spring將採取所有文件(loginindex)從resources/templates

回答

0

據我所知,這個路徑取決於應用程序屬性。默認情況下:

#for freemaker 
spring.freemarker.template-loader-path=classpath:/templates/ 

#for thymeleaf 
spring.thymeleaf.prefix=classpath:/templates/ 
spring.thymeleaf.suffix=.html 

常見應用程序屬性的完整列表,您可以找到here

視圖控制器不會改變行爲。當你輸入url時,Spring會尋找Controller或ViewController的方法,它具有合適的請求映射。如果找到方法,Spring會調用它。之後,控制器的方法返回視圖名稱作爲字符串,並且Spring請求特殊的bean,名稱爲ViewResolver,以查找具有此名稱的視圖。

由於每個模板引擎有自己的ViewResolver,任何ViewResolver有它自己的設定(指定正如我上面說的),他們正在尋找在不同的地方的模板。

例如,您使用的是Thymeleaf,並以url形式輸入:localhost:8080/index。首先,spring會找到與index映射的控制器方法或視圖控制器。之後,控制器將返回字符串index。 Spring會要求Teamleaf視圖解析器來查找這個視圖。根據默認設置,視圖解析器將在視圖名稱之前添加classpath:/templates/,在視圖名稱之後添加.html,之後將嘗試打開具有此名稱的文件。

+0

我不重寫任何屬性。我對當我更改模板引擎時發生更改的viewController的行爲有疑問。 – herau

相關問題