- 浏览: 129450 次
- 性别:
- 来自: 齐齐哈尔滨
文章分类
最新评论
-
sunstar356:
不错 有帮助
Java反射实体类属性(get ,set方法) -
DarkWingBoy:
好多银行网站都是SSH框架做的吧。。。
SSH框架的瓶颈在哪里? -
OnePiece_2012:
很好 多谢了
中科软面试笔试题 -
hzw2312:
.......!
够给力!
JavaScript 获得 汉字 的 完整 拼音 -
tkgguter88:
初学者。谢谢分享
JavaScript 获得 汉字 的 完整 拼音
利用Struts2生成静态页面其实很灵活,很强大,尤其是利用Struts2对Freemarker较好的支持,充分利用Freemarker的模板功能来生成静态页面。
基本思路为:利用Struts2对自定义result type的支持,自定义能够生成静态页面的result type,结合模板引擎Freemarker可以实现大批量静态页面的生成。
参看org.apache.struts2.views.freemarker.FreemarkerResult的代码实现,自定义了自己的生成静态页面的result type。此种方案不单纯用于生成静态页面,其实也可以用于生成诸如wml、xhtml等内容,具体可以参考Struts2缺省提供的各种result type的实现。
1、com.mobilesoft.esales.webapp.action.FreemarkerResult
package com.mobilesoft.esales.webapp.action; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Locale; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import org.apache.struts2.dispatcher.StrutsResultSupport; import org.apache.struts2.views.freemarker.FreemarkerManager; import org.apache.struts2.views.util.ResourceUtil; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.LocaleProvider; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.util.ValueStack; import freemarker.template.Configuration; import freemarker.template.ObjectWrapper; import freemarker.template.Template; import freemarker.template.TemplateException; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; public class FreemarkerResult extends StrutsResultSupport { private static final long serialVersionUID = -3778230771704661631L; protected ActionInvocation invocation; protected Configuration configuration; protected ObjectWrapper wrapper; protected FreemarkerManager freemarkerManager; private Writer writer; protected String location; private String pContentType = “text/html”; protected String fileName; // 要生成的静态页面名称 protected String filePath; // 要生成的静态页面的路径 protected String staticTemplate; // 用于生成静态页面Freemarker模板的路径 public FreemarkerResult() { super(); } public FreemarkerResult(String location) { super(location); } @Inject public void setFreemarkerManager(FreemarkerManager mgr) { this.freemarkerManager = mgr; } public void setContentType(String aContentType) { pContentType = aContentType; } public String getContentType() { return pContentType; } public void doExecute(String location, ActionInvocation invocation) throws IOException, TemplateException { this.location = location; this.invocation = invocation; this.configuration = getConfiguration(); this.wrapper = getObjectWrapper(); this.fileName = (String) conditionalParse(fileName, invocation); this.staticTemplate = (String) conditionalParse(staticTemplate, invocation); this.filePath = ((String) conditionalParse(filePath, invocation)) == null ? “” : ((String) conditionalParse(filePath, invocation)); if (!location.startsWith(”/”)) { ActionContext ctx = invocation.getInvocationContext(); HttpServletRequest req = (HttpServletRequest) ctx .get(ServletActionContext.HTTP_REQUEST); String base = ResourceUtil.getResourceBase(req); location = base + “/” + location; } //生成html页面的模板类 Template template = configuration.getTemplate(location, deduceLocale()); // 生成静态页面的的模板类 Template staticTemplate = configuration.getTemplate(this.staticTemplate, deduceLocale()); TemplateModel model = createModel(); String path = ServletActionContext.getServletContext().getRealPath( filePath) + File.separator; Writer out = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(path + fileName))); if (preTemplateProcess(template, model)) { try { staticTemplate.process(model, out); template.process(model, getWriter()); } finally { postTemplateProcess(template, model); postTemplateProcess(staticTemplate, model); } } } protected Configuration getConfiguration() throws TemplateException { return freemarkerManager.getConfiguration(ServletActionContext .getServletContext()); } protected ObjectWrapper getObjectWrapper() { return configuration.getObjectWrapper(); } public void setWriter(Writer writer) { this.writer = writer; } protected Writer getWriter() throws IOException { if (writer != null) { return writer; } return ServletActionContext.getResponse().getWriter(); } protected TemplateModel createModel() throws TemplateModelException { ServletContext servletContext = ServletActionContext .getServletContext(); HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response = ServletActionContext.getResponse(); ValueStack stack = ServletActionContext.getContext().getValueStack(); Object action = null; if (invocation != null) action = invocation.getAction(); // Added for NullPointException return freemarkerManager.buildTemplateModel(stack, action, servletContext, request, response, wrapper); } protected Locale deduceLocale() { if (invocation.getAction() instanceof LocaleProvider) { return ((LocaleProvider) invocation.getAction()).getLocale(); } else { return configuration.getLocale(); } } protected void postTemplateProcess(Template template, TemplateModel data) throws IOException { } protected boolean preTemplateProcess(Template template, TemplateModel model) throws IOException { Object attrContentType = template.getCustomAttribute(”content_type”); if (attrContentType != null) { ServletActionContext.getResponse().setContentType( attrContentType.toString()); } else { String contentType = getContentType(); if (contentType == null) { contentType = “text/html”; } String encoding = template.getEncoding(); if (encoding != null) { contentType = contentType + “; charset=” + encoding; } ServletActionContext.getResponse().setContentType(contentType); } return true; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public String getFilePath() { return filePath; } public void setFilePath(String filePath) { this.filePath = filePath; } public String getStaticTemplate() { return staticTemplate; } public void setStaticTemplate(String staticTemplate) { this.staticTemplate = staticTemplate; } }
2、struts.xml
<action name=”staticViewAction” class=”com.mobilesoft.esales.webapp.action.StaticViewtAction”> <result name=”success” type=”staticview”> <param name=”location”>test/freemarkertest.ftl</param> <param name=”contentType”>text/html</param> <param name=”fileName”>${filename}</param> <param name=”staticTemplate”>test/freemarkertest.ftl</param> <param name=”filePath”>static</param> </result> </action>
发表评论
-
Android原理揭秘系列之VacantCell缓存
2011-09-08 17:01 946操作过Android手机的朋友应该对在待机界面拖动图标的交互效 ... -
Hibernate 疑难杂症
2011-09-06 13:44 967作者:小生、我怕怕 网址:http://www.apk ... -
APKBank.NET 安卓银行隆重上线运营。
2011-09-01 10:10 935安卓银行(APKBank.NET)于2011年9月1 ... -
深入探讨 Java 类加载器
2011-08-17 13:43 985作者:小生、我怕怕; Email:17zouguo@si ... -
navicat Oracle Instant Client Light: unsupported server character set CHS16GBK解决
2011-06-28 12:10 1578Navicat 连接 Oracle 出现 Instant Cl ... -
根据明暗度分别加不同的水印
2011-06-02 15:12 831package image; import jav ... -
用Spring JMS使异步消息变得简单
2011-04-21 13:00 1336用Spring JMS使异步消息变得简单 ... -
通过Google获取天气预报信息
2011-04-19 16:31 1208Google提供获取天气预报信息的接口: http://ww ... -
Java堆和栈的区别
2011-04-19 15:11 802栈与堆都是Java用来在Ram ... -
解决办法:Access restriction: The type JPEGImageEncoder is not accessible due to rest
2011-04-15 13:20 1090在Eclipse中处理图片,需要引入两个包:import co ... -
Spring 3.0 注解注入详解
2011-04-12 14:48 12475一、各种注解方式 1.@Aut ... -
Spring事务配置的五种方式
2011-04-12 10:23 738前段时间对Spring ... -
Spring3.0+Struts2.1.8+Hibernate3.5整合
2011-04-02 10:03 1119Spring3.0+Struts2.1.8+Hibernate ... -
Java实现远程屏幕监视
2011-03-16 10:49 1154远程屏幕监视使 ... -
图片的切割和缩略
2011-03-02 18:56 817package com.supben.util; imp ... -
Java 图片水印+文字水印+缩图实现
2011-03-02 18:54 1049import java.awt.AlphaComposite; ... -
Java 实现截屏
2011-03-02 18:49 775import java.awt.Dimension; i ... -
java 缩略图
2011-03-02 18:48 0一、较清晰的方法: import java.awt.Grap ... -
PO,BO, VO, DTO, POJO, DAO的概念及区分
2011-02-24 21:36 957O/R Mapping 是 Object Relation ... -
SSH struts、spring、hibernate 面试题
2011-02-24 16:03 1183Hibernate工作原理及为什么要用? 原理: ...
相关推荐
8. **静态页面生成**:整合Struts2和Freemarker的一个常见应用是生成静态页面,提高网站性能。这通常通过在Action中触发静态化逻辑,将Freemarker渲染后的HTML保存到磁盘,然后直接返回这些静态页面。 9. **错误和...
Struts2和FreeMarker是两种在Java Web开发中广泛应用的技术。Struts2是一个基于MVC(Model-View-Controller)架构模式的开源框架,用于构建动态、数据驱动的Web应用程序,而FreeMarker则是一个模板引擎,它允许...
总之,“struts2+freemarker 生成静态页面”是一个旨在提升Web应用性能的技术实践,通过结合Struts2的MVC框架和FreeMarker的模板引擎,实现了动态内容到静态HTML的转化,为用户提供更快的加载速度和更好的浏览体验。...
FreeMarker与Struts2的...通过这个案例,开发者可以学习到如何将FreeMarker与Struts2结合起来,实现动态生成静态页面,以及如何使用c3p0和dbUtils进行数据库操作。这对于理解Web应用的架构和提高开发效率具有重要意义。
Struts2 和 Freemarker 的整合是企业级Java Web开发中常用的技术组合,它们结合使用能够实现灵活、高效的表现层设计。Struts2 是一个强大的MVC框架,而Freemarker则是一个模板引擎,用于生成动态内容。以下是关于...
Struts2是一个流行的Java Web应用程序框架,它提供了一种组织和控制MVC(模型-视图-控制器)架构的方式。而Freemarker则是一个强大的模板引擎,常用于生成动态HTML、XML或其他格式的文本。在Struts2中结合使用...
Struts2集成FreeMarker和Velocity,写成了工具类,快速实现页面静态化,以后直接调用即可,无需修改任何源代码,改压缩文件包括 1、工具类; 2、源码(含jar包); 3、mysql数据库可执行文件; 4、struts2集成...
Struts2和FreeMarker是两种在Java Web开发中广泛应用的技术。Struts2是一个强大的MVC(Model-View-Controller)框架,它极大地简化了构建基于Java的Web应用程序的过程。而FreeMarker则是一种模板引擎,主要用于生成...
freeMarker整合struts2实例调用模板生成html页面,对于初学者肯定有用的
Struts2是一个强大的MVC(Model-View-Controller)框架,它是Apache软件基金会下的一个开源项目...这将帮助我们深入理解这两个工具的协同工作方式,以及在实际项目中如何有效地利用它们提高开发效率和应用的可维护性。
Struts2 和 Freemarker 是两个在Java Web开发中广泛应用的技术,它们共同构成了强大的MVC(模型-视图-控制器)框架。Struts2是Action框架,主要负责处理用户请求、业务逻辑控制以及与视图层的交互,而Freemarker则是...
Struts2结合FreeMarker模板引擎可以方便地生成静态页面,提高网站的响应速度和用户体验。 FreeMarker是一个强大的、轻量级的模板语言,用于生成动态内容。它与Java紧密集成,允许开发者用模板来分离业务逻辑和表现...
Struts2和FreeMarker是两种在Java Web开发中广泛应用的技术。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于构建企业级Web应用程序,而FreeMarker则是一个模板引擎,用于生成动态HTML或...
Struts2和Freemarker是Java Web开发中的两个重要组件,它们在构建MVC(Model-View-Controller)架构的应用程序中发挥着关键作用。Struts2作为一个强大的MVC框架,负责处理请求、控制应用程序流程,而Freemarker则是...
在Struts2框架中,FreeMarker作为视图层的模板技术,接收来自控制器的数据并根据模板规则生成最终的响应页面。FreeMarker模板语言简洁,易于学习,允许开发者将逻辑与表现分离,提高代码可维护性。 项目实例中的...
在本例子中,我们将探讨如何使用Struts1.2和Freemarker2.3.8来实现登录成功页面的静态化。静态化是一种优化网站性能的技术,通过将动态内容提前渲染为静态HTML页面,可以减少服务器处理时间,提高页面加载速度,降低...
Struts2和Freemarker是两个非常流行的Java Web开发框架,它们经常被一起使用来构建动态、交互式的Web应用程序。国际化(Internationalization,通常缩写为i18n)是软件开发中的一个重要概念,它允许应用程序支持不同...
在新闻发布系统中,Freemarker被用作视图层技术,与Struts2结合,根据Action返回的数据动态生成静态页面。这样可以将业务逻辑与表现逻辑分离,使得代码更加清晰。 5. **用户认证与权限管理** 系统中预设了一个管理...
在IT行业中,生成静态...总之,使用Freemarker和Struts2生成静态页面能够提高网站的访问速度,降低服务器压力,同时简化了开发流程。结合合理的缓存策略和自动化更新机制,可以实现高效、自动化的静态页面生成方案。
Struts2是一个强大的Java web应用程序框架,它提供了一种组织应用程序的方式,并且支持多种视图技术,其中之一就是FreeMarker模板。FreeMarker是一个基于模板的、声明式的语言,用于生成动态内容,尤其适合Web应用中...