一、配置
-
整合springmvc
-
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<!--freemarker依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
- spring-mvc.xml
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths" value="/template/"/>
<property name="defaultEncoding" value="utf-8"/>
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">0</prop>
<prop key="locale">zh_CN</prop>
<prop key="datetime_format">yyyy-MM-dd</prop>
<prop key="number_format">#.##</prop>
<prop key="whitespace_stripping">true</prop>
<prop key="default_encoding">UTF-8</prop>
</props>
</property>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<!--<property name="prefix" value="/template/" />-->
<property name="suffix" value=".ftl"/>
<property name="contentType" value="text/html;charset=UTF-8"></property>
<property name="requestContextAttribute" value="request"/>
<property name="exposeSpringMacroHelpers" value="true"/>
<property name="exposeRequestAttributes" value="true"/>
<property name="exposeSessionAttributes" value="true"/>
</bean>
- 在
templateLoaderPaths
路径下创建ftl文件,写法和html一致 - 访问controller,返回freemarker视图模板
或者通过注解来配置(非规范示例:)
@Configuration
@EnableWebMvc
@ComponentScan("com.lwr.controller")
public class ConfigMVC extends WebMvcConfigurerAdapter {
/*
* other config
* */
@Bean
public FreeMarkerConfig getFreeMarkerConfig() {
Properties properties = new Properties();
properties.setProperty("datetime_format", "dd.MM.yyyy");
properties.setProperty("number_format", "#");
properties.setProperty("whitespace_stripping", "true");
// properties.setProperty("auto_include", "lib/implicit.ftl");
properties.setProperty("default_encoding", "UTF-8");
FreeMarkerConfigurer freeMarkerConfigurer = new FreeMarkerConfigurer();
freeMarkerConfigurer.setFreemarkerSettings(properties);
freeMarkerConfigurer.setTemplateLoaderPath("/template/");
return freeMarkerConfigurer;
}
@Bean
public ViewResolver getViewResolver() {
FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
viewResolver.setCache(true);
viewResolver.setPrefix("");
viewResolver.setSuffix(".ftl");
viewResolver.setExposeSpringMacroHelpers(true);
viewResolver.setContentType("text/html;charset=UTF-8");
viewResolver.setOrder(1);
return viewResolver;
}
}
public class WebAppInitiliazer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) {
//添加applicationContext
AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext();
root.scan("com.lwr.service");
servletContext.addListener(new ContextLoaderListener(root));
root.register(ConfigMVC.class);
ServletRegistration.Dynamic appServlet = servletContext.addServlet(
"appServlet", new DispatcherServlet(root));
appServlet.setLoadOnStartup(1);
Set<String> mappingConflicts = appServlet.addMapping("/");
if (!mappingConflicts.isEmpty()) {
throw new IllegalStateException(
"'appServlet' could not be mapped to '/' due to an existing mapping. This is a known issue under Tomcat versions <= 7.0.14; see <a href=\"https://issues.apache.org/bugzilla/show_bug.cgi?id=51278\">https://issues.apache.org/bugzilla/show_bug.cgi?id=51278</a>");
}
}
}