- 浏览: 688250 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
struts2对freemarker有支持。
在response里可以通过加参数来指定显示模式为freemarker
分析下:
<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>
可能是继承重写方法:
在org.apache.struts2.views.freemarker.FreemarkerResult.java
中,只有location和pContentType属性.
ackage 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; } }
发表评论
-
[带菜鸟飞]验证码功能实现
2012-07-17 14:55 1796验证码一般用于登录功能,其实现一般分为两种,js验证码生成和服 ... -
spring mvc3 + hibernate web.xml配置模板
2012-07-12 10:39 2377<?xml version="1.0&q ... -
使用jdk6发布调用web service
2012-06-26 14:22 1948发布web service 如果使用的jdk是1.6 upd ... -
JSR 303 spring3 注释验证备忘
2012-03-14 10:48 1531下载 JSR 303 – Bean Validation ... -
使用glassfish搭建集群
2012-03-13 17:03 2337环境 两台服务器 服务器A主机名为serverA。I ... -
Log4j配置备查
2012-02-29 11:09 1205配置日志信息输出目的地,其语法为: log4j.append ... -
Java文件下载的几种方式
2012-02-29 11:01 1152Java文件下载的几种方式 public ... -
web记录用户登出时间解决方案
2012-02-28 10:28 25612012-2-28 方案一 监听session摧毁 ... -
使用glassfish实现负载均衡和集群
2012-02-27 18:24 66572012-2-27 版本:glassfish v3 ... -
单点登录的基本原理
2011-07-07 19:09 2519任何技术,抓住核心知识则一通百通,要明确战略再研究战术。 ... -
JCS缓存系统核心知识点脑图
2011-05-16 10:40 1045JCS缓存系统核心知识点脑图 P ... -
继续用手去戳GWT
2011-03-23 19:05 1028昨天搞了下GWT开始有点 ... -
用手戳了戳GWT
2011-03-22 20:01 1499以前就听过不少人对GWT ... -
struts2异常处理
2010-04-07 09:31 1446一,Struts2的异常处理机制: 任何成熟的 ... -
struts整合spring
2010-02-21 09:01 978在web.xml中做如下配置 <filte ... -
严重: Error listenerStart问题解决方案
2009-09-27 09:41 1735严重: Error listenerStart org. ...
相关推荐
Struts2和Freemarker是Java Web开发中的两个重要组件,它们在构建MVC(Model-View-Controller)架构的应用程序中发挥着关键作用。Struts2作为一个强大的MVC框架,负责处理请求、控制应用程序流程,而Freemarker则是...
通过以上步骤,Struts2和MyBatis的整合可以让我们在处理复杂的业务逻辑时,既能充分利用Struts2的控制能力,又能享受到MyBatis带来的数据库操作便利。这种整合方式降低了系统的耦合度,提高了代码的可维护性和可扩展...
在本项目中,我们看到Struts2还整合了Freemarker作为视图模板引擎,使得前后端数据交互更加方便。 首先,让我们深入了解一下Struts2的FileUpload整合。Struts2提供了`struts2-upload-plugin`插件来支持文件上传。要...
将jQuery与Struts2整合可以使前端与后端的数据交互变得更加高效和便捷。下面我们将详细讲解如何实现这一整合。 **1. 环境配置** 在整合jQuery和Struts2之前,我们需要确保所有的依赖库已经正确地引入到项目中。关键...
总之,Struts2、Spring和Hibernate的整合为Java Web开发提供了一个强大的工具集,能够处理复杂的业务逻辑,实现松耦合的架构。理解并掌握这三个框架的原理和整合方式,对于提升开发效率和代码质量具有重要意义。
在Java Web开发中,整合Struts2和Hibernate可以帮助开发者更有效地管理和操作数据,提高开发效率。 Struts2是一个强大的MVC框架,它提供了一种组织和管理Web应用逻辑的方式。它通过拦截器来处理请求,使得业务逻辑...
5. **整合Struts2和Spring**:使用Spring的Struts2插件,这样Struts2的动作类可以从Spring容器中获取bean,实现依赖注入。在struts.xml配置文件中,通过`<plug-in>`标签引入Spring插件。 6. **动作类和业务逻辑**:...
Struts2和MyBatis的配置信息通常会整合到Spring的配置文件中,以实现整体的统一管理和控制。 项目结构通常如下: - src/main/java:存放业务逻辑类、DAO接口及实现、Struts2 Action类。 - src/main/resources:存放...
在IT行业中,构建高效、可维护的企业级应用是至关重要的,而Spring、MyBatis、Struts2和MySQL这四个组件的整合框架就是一个常见的选择。这个框架组合提供了模型-视图-控制器(MVC)架构模式,数据持久化,以及灵活的...
Struts2支持多种模板技术,如FreeMarker和JSP,能够轻松实现动态页面渲染。 Spring3是全面的企业级应用框架,它在业务层提供了依赖注入(DI)和面向切面编程(AOP)的能力,帮助开发者管理对象的生命周期和装配。...
Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它由Apache软件基金会维护。在Java EE应用开发中,Struts2...例如,如果项目涉及Spring或Hibernate整合,还需要相应的Struts2整合插件。
整合过程中,Spring通常作为核心容器,管理其他组件,包括Struts2和Hibernate。Struts2的动作调度和拦截器机制与Spring的AOP相结合,可以实现细粒度的权限控制和日志记录。而Hibernate作为持久层框架,可以通过...
SSH整合是指将Struts2、Spring和Hibernate这三个流行的开源Java框架集成在一起,以构建高效、模块化的企业级Web应用程序。这个“SSH整合 Struts2.1+Spring4.1+Hibernate4.1”是一个预配置的框架模板,适用于快速开发...
SSH4整合是指将Spring4、Hibernate4和Struts2集成在一起,以实现一个高效、灵活且可维护的Web应用程序。下面我们将深入探讨这三个框架的核心功能及其整合过程。 **Spring框架** Spring是Java企业级应用的基石,它...
Struts2 和 Hibernate 是两种非常流行的开源框架,它们在...通过分析这个源码,开发者不仅可以学习到如何整合Struts2和Hibernate,还可以深入了解MVC架构以及Java Web开发的基本流程。这有助于提升实际项目开发能力。
Struts2、Spring3和MyBatis是Java开发中常用的三大...以上就是关于Struts2、Spring3和MyBatis整合以及在图书管理系统中的应用的详细介绍,这个整合方案提供了强大的功能和良好的架构,适用于大多数企业级Java Web项目。
2. 引入框架:通过Maven或手动方式导入Struts、Hibernate、Spring和FreeMarker的相关库。 3. 配置web.xml:添加四大框架的初始化参数和过滤器,确保它们能正确启动。 4. 定义模型和数据访问层:使用Hibernate创建...
4. **Struts2兼容性库**:对于与其他框架如Spring、Hibernate的整合,可能还需要如`struts2-spring-plugin.jar` 和 `struts2-hibernate-plugin.jar`。 5. **国际化和本地化支持**:`struts2-i18n-plugin.jar` 提供...
总之,“深入浅出Struts2”这份资料全面讲解了Struts2的各个关键组成部分,包括其工作原理、配置方式、拦截器机制、OGNL表达式、插件使用以及与Spring的整合,是学习和掌握Struts2框架的宝贵资源。通过深入学习和...