关于freemarker include的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于freemarker include的问题相关的知识,希望对你有一定的参考价值。
我想动态地 <#include topmodel/> 一个模板 topmodel是一个动态的值,是由action 返回的! 但是这样就会报语法错误。 如果 <#assign newmodel="news.ftl"> <#include newmodel/> 这样就可以。请问freemarker有没有办法动态地include 呢?
参考技术A 同时在线1000人?这是什么概念??可以做集群了。数据库建议还是使用Mysql做集群吧,或者用Oracle,一台就搞定,不过服务器配置要好一点。
前端可以使用Lighttpd+Squid+Apache的配置,减少服务器的压力,使用负载均衡;业务逻辑和数据库之间可以使用membercached+hibernate来实现对数据的缓存。
对静态资源实施FastCDN加速,把图片、CSS文件、JS文件等存放在静态资源服务器上。
前端的话使用Java或者PHP并不是那么重要了。
推荐适用于大型应用的Java框架:
Struts2(Webwork) + Spring + Hibernate(include membercached) + Freemarker or JSP(推荐使用Freemarker,页面执行速度接近Html静态页面了)
Hibernate 可以换成 ibatis3.0,然后根据需要自己开发与Membercached的集成。
优点:
1、开发速度明显优于Struts1,目前本人正在使用Struts2,深有体会;
2、维护成本降低,比较适应需求的不断变更;
3、学习曲线较短,比较适合小团队快速上手;
4、现成的成熟的插件丰富,很多组件不需要自己开发;
缺点:
1、团队里必须有人对其要有深入的理解,否则优化它的效果甚微;
2、前期的准备工作比较繁重,但是后期会比较轻松;
3、部份重要功能成为鸡肋,如自带的Ajax、JSON插件(根本无法使用,慢到死,要么就功能不完善,还要有很棒的代替品:jQuery、Gson等)
前端甚至可以使用Membercache对页面内容进行缓存,可以达到动态静态的快速转换。
服务器的优化及选择:
Sun的技术,当然配合Sun的服务器才会达到质的飞跃(注:我不是Sun的托,只是Sun公司到我们公司做过服务器的对比测试而已)。
同配置下性能对比:
Sun Solaris > Linux(Windows)
springboot整合freemarker自动加载宏
springboot引入freemarker最大的问题,在于springboot的application.properties配置文件,不能覆盖所有的freemarker配置
如果freemarker有自定义宏应该怎样引入呢?
首先 application.properties增加配置(与freemarker.properties一样)
auto_import = _
auto_include = /layout/pageShow.html
然后增加FreemarkerConfig类,启动即可
/**
* Freemarer 配置
* 增加自动注入和包含配置
* Created by 灰灰 on 2017/7/1.
*/
@org.springframework.context.annotation.Configuration
public class FreemarkerConfig
private static Logger log = LoggerFactory.getLogger(FreemarkerConfig.class);
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer(@Value("$auto_import") String autoImport, @Value("$auto_include") String autoInclude)
FreeMarkerConfigurer config = new FreeMarkerConfigurer();
writerProperties(config);
Configuration configuration = null;
try
configuration = config.createConfiguration();
catch (IOException e)
e.printStackTrace();
catch (TemplateException e)
e.printStackTrace();
setAutoImport(autoImport,configuration);
setAutoInclude(autoInclude,configuration);
config.setConfiguration(configuration);
return config;
@Autowired
private FreeMarkerProperties properties;
private void writerProperties(FreeMarkerConfigurer config)
config.setTemplateLoaderPaths(this.properties.getTemplateLoaderPath());
config.setPreferFileSystemAccess(this.properties.isPreferFileSystemAccess());
config.setDefaultEncoding(this.properties.getCharsetName());
Properties settings = new Properties();
settings.putAll(this.properties.getSettings());
config.setFreemarkerSettings(settings);
private void setAutoImport(String autoImport,Configuration configuration)
if("_".equals(autoImport.trim()))
return;
String[] imports = autoImport.split(";");
Map<String,String> importMap = new HashMap<String,String>(imports.length);
for (String s : imports)
String[] keyValue = s.split("as");
if (keyValue.length != 2)
log.error("freemarker配置auto_import格式不正确 ");
throw new RuntimeException("freemarker配置auto_import格式不正确");
importMap.put(keyValue[1].trim(),keyValue[0].trim());
configuration.setAutoImports(importMap);
private void setAutoInclude(final String autoInclude,Configuration configuration)
if ("_".equals(autoInclude.trim()))
return;
String[] includes = autoInclude.split(";");
for (String s : includes)
System.out.println(s);
List list = new ArrayList<String>(Arrays.asList(includes));
configuration.setAutoIncludes(list);
以上是关于关于freemarker include的问题的主要内容,如果未能解决你的问题,请参考以下文章
在js中使用freemarker的标签比如 include 等