方法一:(这个方法借鉴freemarker的docs文档Programmer's Guide 的quick start部分,详细请看相关的文档。
public class HtmlTemplateGenerator {
Configuration cfg = null;
public HtmlTemplateGenerator(String templatePath) throws IOException {
cfg = new Configuration();
cfg.setDefaultEncoding("UTF-8");
cfg.setDirectoryForTemplateLoading(new File(templatePath));
cfg.setObjectWrapper(new DefaultObjectWrapper());
}
/**
* 生成静态文件
* @param ftlTemplate ftl模版文件
* @param contents ftl要用到的动态内容
* @param savePath 文件保存路径
* @param saveFilename 保存文件名
* @throws IOException
* @throws TemplateException
*/
public void create(String ftlTemplate, Map contents, String savePath, String saveFilename) throws IOException, TemplateException {
Template temp = cfg.getTemplate(ftlTemplate);
/* Merge data model with template */
String realPath = ServletActionContext.getServletContext().getRealPath(savePath);
System.out.println( saveFilename + ":" + realPath);
File file = new File(realPath);
if(!file.exists())
file.mkdirs();
Writer out = new OutputStreamWriter(new FileOutputStream(realPath + "/" + saveFilename),"UTF-8");
temp.process(contents, out);
out.flush();
}
}
如果用spring,可以将它配置成bean,然后在其他地方使用。第五行的 templatePath 是模版文件的路径,比如/WEB-INF/template。
action中的使用:HtmlTemplateGenerator.create("html/magazine/search.ftl",
null, "/magazine", "search.html");
其中“html/magazine/search.ftl”是在“/WEB-INF/template”目录下。这里还需要注意的是。模版文件
(search.ftl)中如果还要引用其他文件,它的路径也是不需要添加总路径“/WEB-INF/template”。
方法二:继承webwork的FreemarkerResult,改写getWriter方法:
不知有无好的法子。
protected Writer getWriter() throws IOException {
String savePath = (String) ActionContext.getContext().getSession().get("SAVE_PATH");
String saveFilename = (String) ActionContext.getContext().getSession().get("SAVE_FILENAME");
String realPath = ServletActionContext.getServletContext().getRealPath(savePath);
System.out.println( saveFilename + ":" + realPath);
File file = new File(realPath);
if(!file.exists())
file.mkdirs();
return templateOut = new OutputStreamWriter(new
FileOutputStream(realPath + "/" + saveFilename),"UTF-8");
}
这里的路径和文件名通过webwork的session传入,不知有无其他好方法。
如果生成文件的同时还需要看到生成的页面,则要改写“doExecute”:
template.process(model, getWriter());
template.process(model, super.getWriter()); //添加这句
templateOut.flush();
生成的文件格式不限于html,可以是其他文件格式,如js,text等。
比较这两种方法:
方法一:在需要生成分页文件时,比较合适。
方法二:可以象往常一样使用,一次需要生成多文件则不适合。
分享到:
相关推荐
1. WebWork是一个轻量级的MVC框架,它的控制器负责处理请求,模型处理业务逻辑,而Freemarker作为视图层,负责生成响应。 2. 结合点:WebWork将处理后的模型数据注入到Freemarker的环境中,通过模板渲染后返回给...
Freemarker是一个强大的Java模板引擎,它允许开发者将业务逻辑与视图层分离,使得HTML、XML等静态页面可以通过模板动态生成。以下是关于Freemarker语法和实例的详细讲解: 1. **概念** - **Sequence**:序列,类似...
3. **freemarker**:FreeMarker是一个模板引擎,常用于生成HTML或其他静态文本,如邮件内容。在Struts2中,FreeMarker被用作视图层的技术,允许开发者通过模板语言来动态地生成HTML。学习这部分可能涉及到FreeMarker...
Xwork是一个Command模式实现,提供拦截器、表单验证、类型转换等功能,而WebWork2则负责处理HTTP请求,支持多种视图技术,如JSP、Velocity、FreeMarker等。WebWork2.2开始支持AJAX。 2. **Struts**:Struts是另一个...
8. `org.apache.struts2.views`:提供了对FreeMarker、JSP、Velocity等模板引擎的支持,用于生成动态页面。 关键类解释: - `org.apache.struts2.dispatcher.Dispatcher`:是Struts2的核心类,它初始化框架并调用...
### Java框架及开源项目知识点概览 #### 一、Spring Framework ...- 生成静态网页或其他格式的文档,特别是在需要根据动态数据生成内容的情况下。 - 为 Web 应用生成动态内容,如用户界面、报表等。
8. `org.apache.struts2.views` 提供了不同模板引擎的支持,如FreeMarker、JSP和Velocity,用于生成和呈现视图。 在实际运行中,`FilterDispatcher`作为一个过滤器发挥作用,它负责接收HTTP请求,执行Action,清理...
- **视图**:支持多种视图技术,如JSP、Freemarker等。 - **配置**:使用XML或注解来进行配置。 #### 9. Struts 2 的标签库 Struts2提供了丰富的标签库,用于简化页面开发,例如: - ****:用于生成文本框。 - ***...
4. **插件机制**:Struts2拥有丰富的插件库,例如Tiles插件用于页面布局,FreeMarker或Velocity模板引擎用于生成动态视图,JSON插件提供JSON数据支持,这些插件极大地丰富了框架的功能。 5. **Action与Result**:...
Struts2通过整合其他优秀框架如WebWork,提供了一种更现代、更模块化的开发方式。 **2. MVC模式** Struts2遵循MVC设计模式,其中: - **模型(Model)**:处理业务逻辑和数据操作,通常由JavaBeans或POJOs实现。 - ...
**Servlet**的工作流程如图所示,当客户端向特定URL发送请求时,Web服务器接收并转发给相应的Servlet,Servlet处理后生成响应返回给客户端。 ##### 1.2 MVC思想概述 - **Model(模型)**:负责业务逻辑和数据处理...
Struts2是Apache Struts项目下的一个开源框架,它继承了Struts1的一些特性,同时又结合了WebWork框架的优点,使得它在Java Web开发领域具有很强的竞争优势。Struts2的核心优势在于它的灵活配置和强大的拦截器机制。 ...
表单输入生成宏 14.4.5.4. 重载HTML转码行为并使你的标签符合XHTML 14.5. XSLT 14.5.1. 写在段首 14.5.1.1. Bean 定义 14.5.1.2. 标准MVC控制器代码 14.5.1.3. 把模型数据转化为XML 14.5.1.4. 定义视图属性 14.5....