在dispatcher-servlet.xml文件中添加freemarker视图配置信息
<!-- 针对freemarker的视图配置 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".html" />
<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>
新建一个applicationContext-freemarker.xml文件,设置freemarker配置信息
<!-- 设置freeMarker的配置文件路径 -->
<bean id="freemarkerConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:freemarker.properties"/>
</bean>
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<!--模版文件存放路径-->
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="freemarkerSettings">
<props>
<!-- 处理变量中的null值,自动转为空字符串 -->
<prop key="classic_compatible">true</prop>
<!--默认编码 -->
<prop key="defaultEncoding">UTF-8</prop>
<!--异常处理 -->
<prop key="template_exception_handler">com.oecs.cms.common.exception.FreemarkerExceptionHandler</prop>
<!-- 正式环境改为更大:如1800(半小时) -->
<prop key="template_update_delay">300</prop>
<prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="time_format">HH:mm:ss</prop>
<!-- 防止出现1,234这样的数字格式 -->
<prop key="number_format">#</prop>
<prop key="boolean_format">true,false</prop>
<!-- 清除空白 -->
<prop key="whitespace_stripping">true</prop>
</props>
</property>
</bean>
新建TemplateService类
@Service
public class TemplateServiceImpl implements ITemplateService{
private static final Logger log = Logger.getLogger(TemplateServiceImpl.class);
@Autowired
private FreeMarkerConfigurer freemarkerConfig;
private static boolean init = false;
public Template getTemplate(String name) {
if(!init){
initialize();
}
Template tem = null;
try {
tem = freemarkerConfig.getConfiguration().getTemplate(name);
} catch (IOException e) {
log.warn("[getTemplate error, name: "+name+". "+e.getMessage()+"]");
}
return tem;
}
public String getTemplateString(String name) {
return getTemplate(name).toString();
}
public String buildPage(String name, Map<?, ?> data) {
StringWriter sw = new StringWriter();
Template tem = getTemplate(name);
try {
tem.process(data, sw);
} catch (Exception e) {
log.error("[buildPage error: "+e.getMessage()+"]",e);
}
return sw.getBuffer().toString();
}
public Integer buildPage(String name, Map<?, ?> data, String fullPath) {
Writer writer;
try {
File file = new File(fullPath);
if(!file.exists()){
file.createNewFile();
}
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),Charset.forName("UTF-8")));
String str = buildPage(name, data);
writer.write(str);
writer.close();
} catch (Exception e) {
log.error("[buildPage error: "+e.getMessage()+"]",e);
}
return 0;
}
public Integer buildPage(String name, Map<?, ?> data, String filePath,
String fileName) {
return null;
}
public Integer buildPage(String name, Map<?, ?> data, File file) {
Writer writer;
try {
writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
Template tem = getTemplate(name);
tem.process(data, writer);
} catch (Exception e) {
log.error("[buildPage error: "+e.getMessage()+"]",e);
}
return 0;
}
public void initialize() {
// TODO Auto-generated method stub
}
测试
@Autowired
private ITemplateService temService;
@RequestMapping("/welcome2.do")
public ModelAndView find(HttpServletRequest request){
ModelAndView mv = new ModelAndView("welcom2");
List<CmsRoleModel> list = roleService.find();
Map map = new HashMap();
map.put("name", "zhang");
map.put("sex", "nan");
try {
temService.buildPage("welcom2.html", map, "D:/workspace_oecs/oecs_cms/WebContent/1.jhtml");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(list.size());
mv.addObject("name2",list);
return mv;
}