基于Struts2的stream_JAVA_编程开发_程序员俱乐部
中国优秀的程序员网站
程序员频道
CXYCLUB技术
地图
最新资讯
|
百度新闻
|
GOOGLE地图
|
RSS订阅
|
更多
职场话题
生活休闲
恋爱交友
程序人生
学习进修
职业发展
项目管理
求职面试
程序员创业
JAVA
.NET
C/C++
Ruby
Delphi
JavaScript
PHP
ASP
JSP
HTML
XML
移动开发
开发工具
其他
编程开发
数据库
操作系统
新闻资讯
互联网
非技术区
非技术区
生活休闲
恋爱交友
职业发展
求职面试
程序人生
移动开发
开发工具
DB2
MySql
Sybase
开发
JAVA
.NET
PHP
C/C++
数据库
SQL Server
Oracle
互联网
运营
推广
营销
SEO
系统
Linux
Unix
Windows
资讯
动态
产品
人物
创业
职场
学习
管理
热搜:
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
Flex
Play框架
加密解密
J2EE
缓存
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
更多>>
您所在的位置:
程序员俱乐部
>
编程开发
>
JAVA
> 基于Struts2的stream
基于Struts2的stream
2011/10/18 6:10:49 hbxflihua http://hbxflihua.iteye.com
我要评论(
0
)
摘要:
最近的一个项目中有涉及到将页面内容导出到WORD的需求。实现方式可以从两个角度去考虑,一种是基于javascript技术,再有就是通过java技术。首先说说基于前台的实现。刚开始,出于简单的考虑,我准备在前台jsp处理。其中有两种实现方式。一种是纯javascript的,另一种是通过在jsp中嵌入java代码实现。javascript的实现要考虑到浏览器的兼容性,所以暂时不想通过js来进行控制。当然,如果有前端的js框架封装如jQuery的封装,这样做起来就简单多了
标签:
struts
最近的一个项目中有涉及到将页面内容导出到WORD的需求。实现方式可以从两个角度去考虑,一种是基于
javascript
技术,再有就是通过java技术。
首先说说基于前台的实现。
刚开始,出于简单的考虑,我准备在前台jsp处理。其中有两种实现方式。一种是纯javascript的,另一种是通过在jsp中嵌入java代码实现。javascript的实现要考虑到浏览器的兼容性,所以暂时不想通过js来进行控制。当然,如果有前端的js框架封装如jQuery的封装,这样做起来就简单多了。网上没找到js框架实现的资料。javascript的实现倒是有一种,不过只是基于IE的,代码如下:
//指定页面区域内容导入Word
function
exportAreaToDoc()
{
var oWD = new
ActiveXObject
("Word.Application");
var oDC = oWD.Documents.Add("",0,1);
var orange =oDC.Range(0,1);
var sel = document.body.createTextRange();
sel.moveToElementText(body);
sel.select();
sel.execCommand("Copy");
orange.Paste();
oWD.Application.Visible = true;
//window.close();
}
从中我们可以看出,导出是基于IE的一个控件,所以很难实现兼容,考虑兼容性恐怕要写很多的js代码。如果有js框架的封装,这事情就变得简单多了。当然,还有一点需要特别注意,这段代码在静态页面中是可以运行的,如果将代码放在tomcat等部署的项目中时,会抛出js
异常
,详见我的上一篇文章。
在前台jsp页面的第二种实现是基于java代码的,具体代码如下:
<%@ page contentType="application/msword; charset=GBK" %>
<%
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode("idea.doc", "GBK"));
%>
这个恐怕就更简单了。熟悉jsp的人都知道,jsp内容的编译过程是先对java代码进行编译(这里当然也包括框架标签如el,jstl,
struts
标签等),然后是js代码,最后页面静态标签。如果页面比较功能比较单纯,即不会在页面做其他特别的处理,使用该方法再好不过了。但需要注意的时,如果你的页面内容是用js动态添加(生成)的,则这种方式行不通,这主要是刚才提到的jsp内容编译的机制引起的。
而我的导出页面涉及到其他的一些功能,比如新增,编辑等操作,所以一旦添加上这段java代码,整个页面就不能重用了。所以,我又用了一种处理方式,就是在点击 ‘导出’按钮的时候,弹出一个页面,在弹出的页面中动态的添加文本内容,然后导出到word。当是忽略了jsp页面内容的编译机制,最后不得不放弃这种方案。
以下是基于后台的实现方案。即使用java代码以流的形式输出到前台,这里就不用考虑该死的浏览器兼容性问题了。
其实后台的实现也可以从两个方面着手,一种纯手工实现,另一种当然是基于框架了。java中生成doc的框架有很多,比如POI,itxt,java2doc,struts2等等。各种框架都做了很好的封装,我在这里就不一一详细说明了,有兴趣的朋友可以自己上网查查。
我的需求其实蛮简单,将前台的页面输出内容以流的形式导出到word中。这里会遇到
一些问题
。比如,图片的处理,html页面标签的显示等问题。我的需求中没有关于图片的输出,所以这个问题就不用去考虑了,倒是页面标签的处理问题一直是令人头痛的问题。页面常用的标签如input,textarea在word文档中都不能很好的显示。
以下是代码的实现:
1.在action中
private String fileName;//
文件名
称
private InputStream istream;
getter,setter……
@Override
public String execute() throws Exception {
String expinfo=request.getParameter("expinfo");
if(!ValidateUtil.validateString(expinfo)){
return null;
}
String result=correctExpInfo(expinfo);
istream=new ByteArrayInputStream(result.getBytes(), 0, result.length());
return SUCCESS;
}
2.struts.xml配置
<action name="rwexp" class="*.RwexpAction">
<result type="stream">
<param name="contentType">
application/vnd.ms-word;charset=UTF-8
</param>
<param name="inputName">
istream
</param>
<param name="contentDisposition">
filename=${fileName}
</param>
<param name="bufferSize">
1024
</param>
</result>
</action>
当然这里,也可以定义以excel,txt,pdf,img等以流的形式输出的文件.具体都没有太大的区别。pdf,img的输出稍显麻烦些。
3.页面中的处理
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>导出WORD</title>
<script type="text/javascript"
src="${root}/js/jquery/jquery-1.4.4.min.js">
</script>
<script type="text/javascript">
$(function(){
var exp=window.opener.$("#p_body").html();
$('#exp_body').append(exp);
exp=exp.replace(/\TEXTAREA/g,'label').replace(/\INPUT/g,'label');//将textarea,input转换成label,便于生成word
$('#expinfo').val(exp);
});
</script>
</head>
<body id="exp_body" style="background-color:#fff" >
<form action="${root}/jxEval/rwexp.action" name="expform" id="expform" method="post">
<textarea name="expinfo" id="expinfo" style="display: none;" ></textarea>
<input type="submit"" value="导出WORD" title="导出WORD" />
</form>
</body>
</html>
原创首发,转载请注明出处。
上一篇:
某应用的GC调优总结
下一篇:
linux下类似百度文库开发研究与实战
相关文章
·
struts输出图片列表
·
Struts安全拦截器
·
Struts2架构图
·
the struts dis
·
解决struts2重定向丢失
·
Poi 读写Excel 合并
·
struts2实现登录se
·
Err:java.lang.
·
struts1开发步骤,执行
·
Struts2注解零配置【私
查看所有评论(
0
)
我要评论
发表评论
用户名:
匿名
最新文章
J..
h..
·
后台json传递
·
Java实现二维码QRCod
·
Java面向对象(讲义)请各
·
在HBase中应用MemSt
·
java继承中的一些 错误认
·
JXL copySheet
·
在CMD下对Java程序的调
·
同步与异步--阻塞与非阻塞
·
JDBC连接各种数据库
·
Java 对象句柄
·
jna调用dll文件遇见问题
·
hadoop0.20.1在c
·
JSTL一些详细解析
·
Java多线程 Web服务
·
word,ppt,excel
最新标签
异步
同步
编码
冒泡排序
下拉联动
序列化
回调机制
Maven
版本
端口扫描
今日热点
·
全面认识Eclipse中JVM内存设置
·
struts标签实现菜单动态级联
·
JDK1.6官方下载地址
·
后台json传递
·
Java实现二维码QRCod
·
Java面向对象(讲义)请各
·
在HBase中应用MemSt
·
java继承中的一些 错误认
·
JXL copySheet
·
在CMD下对Java程序的调
推荐文章
unable ..
老..
·
The last pack
·
unable to find valid
·
老三携剑出山,Swing法力
·
java poi 创建exc
·
Errors occurre
·
[linux]ubuntu下
·
java 两数相除 四舍五入
·
Java 调用远程webservice接
·
Hadoop学习全程记录——
·
JAVA 比较两张图片的相似
·
J2EE、JAVA开源版OA发布了(JO
·
在linux下用tomcat
·
异常ognl.OgnlExc
·
Eclipse设置Tomcat启动超时时
·
org.springfra
English
|
关于我们
|
诚聘英才
|
联系我们
|
网站大事
|
友情链接
|
意见反馈
|
网站地图
Powered by
程序员俱乐部
程序提供: HugoCMS 2.0
网站备案:苏ICP备11048748号-1