零XML配置 SpringMVC 进阶之路 - 配置FreeMarker
上一篇文章,我们讲解了添加消息转换器的过程,消息转换器只有在@ResponseBody注解下才能生效,也就是我们说的Rest接口,那么渲染页面怎么配置呢? 本文介绍一下零XML配置 SpringMVC 项目中怎么引入FreeMarker模板引擎。 引入依赖包SpringMVC对三方模板引擎的支持是在spring-context-support包中,另外也需要引入freemarker自身的包。 <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
配置FreeMarkerConfigurer在RootConfig中配置FreeMarkerConfigurer的Bean: @Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setDefaultEncoding("utf-8");
configurer.setTemplateLoaderPath("/WEB-INF/views/");
Properties properties = new Properties();
properties.setProperty("defaultEncoding","UTF-8");
configurer.setFreemarkerSettings(properties);
return configurer;
}
配置FreeMarkerViewResolver默认的FreeMarkerConfigurer功能很少,也不够我们使用,所以SpringMVC专门提供了FreeMarkerViewResolver这个供我们附加自己的个性化配置。 @Bean
public FreeMarkerViewResolver freeMarkerViewResolver() {
FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
resolver.setSuffix(".ftl");
resolver.setContentType("text/html;charset=UTF-8");
resolver.setCache(false);
resolver.setExposeRequestAttributes(true);
resolver.setRequestContextAttribute("request");
resolver.setOrder(0);
return resolver;
}
新增一个页面新增一个Controller@Controller
@RequestMapping("/page")
public class PageTestController {
@GetMapping("/hello")
public String hello(String name,Model model){
System.out.println(name);
model.addAttribute("name",name);
return "app";
}
}
新增页面在main目录下新增webapp/WEB-INF/views目录,并且在目录下新增以下代码: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HelloWorld</title>
</head>
<body>
你好,${name}
</body>
</html>
结果浏览器中输入: http://localhost:8080/page/hello?name=中国人
页面: 注意事项一定要注意中文编码问题,添加下面一行,使用UTF-8可以解决中文编码问题,但是也要注意views的文件的编码。 @Bean
public FreeMarkerConfigurer freeMarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
//解决中文编码问题
configurer.setDefaultEncoding("utf-8");
configurer.setTemplateLoaderPath("/WEB-INF/views/");
Properties properties = new Properties();
configurer.setFreemarkerSettings(properties);
return configurer;
}
另外ServletConfig一定一定一定不要重载WebMvcConfigurerAdapter的下面的方法: @Override
public void configureViewResolvers(ViewResolverRegistry registry) {
}
重载这个方法会导致我们自己实现的FreeMarkerViewResolver不生效,会生效默认的FreeMarkerViewResolver。 而Spring的官方指导文档却是重载了这个方法,导致我查这个问题查了将近两个小时,最后Debug跟踪源码才找到原因。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |