`
hbxflihua
  • 浏览: 678388 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

基于Struts2的stream

阅读更多

最近的一个项目中有涉及到将页面内容导出到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="xxx.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> 


 

 

2
1
分享到:
评论

相关推荐

    基于struts2的项目

    在"基于Struts2的项目"中,我们通常会看到以下核心概念和组件: 1. **Action类**:这是业务逻辑的入口点,负责处理来自客户端的请求。Action类通常实现了`com.opensymphony.xwork2.Action`接口或其子接口,如`...

    基于Struts2的文件上传下载功能的完整源代码。

    在基于Struts2的文件上传下载功能中,它提供了处理用户上传文件和提供文件下载的服务。这个完整的源代码是实现这些功能的一个实例,经过测试确保了其正确性和可用性。 首先,我们要理解Struts2中的Action类。Action...

    基于struts2的代码

    通过这个"基于Struts2的代码"的学习资料,初学者将能掌握如何搭建一个基本的Struts2 Web应用,包括编写Action类、配置struts.xml、创建JSP页面,以及理解Struts2的核心机制。在实际操作中,结合书目中的"bookstore...

    留言板留言板struts2留言板struts2

    这个"留言板留言板struts2"项目,显然是一个基于Struts2实现的简单留言板系统,旨在展示Struts2的核心功能和开发流程。下面将详细介绍Struts2框架以及在该项目中可能涉及的关键知识点。 1. **Struts2框架概述**:...

    基于struts2的学生管理系统

    **基于Struts2的学生管理系统详解** Struts2作为一款强大的MVC(模型-视图-控制器)框架,是Java Web开发中的重要工具。本项目是一个典型的应用实例,它旨在实现一个高效、易维护的学生管理系统。这个系统利用...

    基于Struts2的管理员,老师,学生登录系统

    在这个基于Struts2的管理员、老师和学生登录系统中,我们可以深入探讨以下几个核心知识点: 1. **Struts2框架**:Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其不足,提供了一种...

    基于struts2的简单用户管理

    这个项目“基于Struts2的简单用户管理”旨在为初学者提供一个实践平台,让他们了解并掌握如何利用Struts2框架进行用户管理系统的开发,主要包括用户数据的增加、删除、查询和修改等基本操作。 在Struts2框架中,...

    Java Struts2 实现CRUD

    Struts2是Java Web开发中一个非常流行的MVC框架,它极大地简化了Web应用程序的构建,特别是对于实现CRUD(创建、读取、更新、删除)操作。在本篇文章中,我们将深入探讨如何使用Java Struts2框架来完成这些基本的...

    Struts2 Struts2 超好的Struts2 pdf 文档

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它在Web开发领域中被广泛使用。这个“超好的Struts2 pdf 文档”很可能包含了关于Struts2的全面介绍、核心概念、配置、拦截器、结果...

    Struts2+Jquery+Ajax

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,用于构建可维护性高、结构清晰的企业级应用。Struts2提供了丰富的功能,如拦截器、结果类型、国际化支持等,使得开发者...

    基于struts2的上传下载实例

    在这个"基于struts2的上传下载实例"中,我们将探讨如何利用Struts2实现文件上传和下载的功能。 首先,让我们理解上传功能在Struts2中的实现。在Struts2中,我们可以使用`&lt;s:file&gt;`标签来创建一个文件选择输入字段。...

    struts2所用到的jar包

    综上所述,Struts2的核心包和IO包是构建基于Struts2的应用程序不可或缺的部分,它们为开发者提供了全面的工具和机制,以实现高效、灵活的web应用程序开发。通过熟练掌握这些知识点,开发者可以更好地利用Struts2的...

    基于struts2的上传下载

    ### 基于Struts2的文件上传与下载 #### 一、背景介绍 在Web应用开发中,文件上传和下载是一项非常常见的功能需求。Struts2作为一款流行的企业级应用框架,支持多种方式实现文件的上传与下载。本文将详细介绍如何...

    Struts2实现的博客系统

    5. **结果类型**:Struts2支持多种结果类型,如dispatcher(转发)、redirect(重定向)、stream(流式结果,用于下载文件等)。在博客系统中,根据业务需求选择合适的返回类型,比如查看博客通常使用dispatcher,而...

    struts2实例小程序1

    Struts2是一个强大的Java web应用程序框架,用于构建和部署可维护、高性能的MVC(Model-View-Controller)架构的应用程序。在这个“Struts2实例小程序1”中,你将开始接触并理解Struts2的基本概念和工作流程,这对于...

    Struts2全部jar包

    6. **插件体系**:Struts2支持丰富的插件,如Struts2-convention-plugin(基于约定的配置)、Struts2-dojo-plugin(Dojo库集成)、Struts2-json-plugin(JSON支持)等,方便开发者快速实现特定功能。 7. **Tiles...

    struts2核心文件

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源Java Web框架,它在Web应用开发中被广泛使用。Struts2的核心在于提供一个强大的、灵活的、可扩展的架构,使得开发者能够更方便地实现业务逻辑与表现层...

    struts2的复习

    Struts2支持多种结果类型,如dispatcher(转发到JSP)、stream(流式结果,常用于下载文件)等。 四、拦截器 5. 拦截器:拦截器是Struts2的核心组件,它们按照预设顺序在Action执行前后执行,实现AOP(面向切面编程...

    基于Struts2+Ajax+JDBC的企业级JavaWeb架构.zip

    综上所述,"基于Struts2+Ajax+JDBC的企业级JavaWeb架构"是一种常见的Web开发模式,它通过Struts2实现MVC结构,提高代码组织和业务逻辑的分离;利用Ajax提升用户体验,实现页面的无刷新交互;而JDBC则提供了与...

    Struts2项目代码

    Struts2是Apache软件基金会下的一个开源项目,它是基于Model-View-Controller(MVC)设计模式的。它继承了Struts1的优点,并引入了许多新特性,如拦截器、插件架构和更强大的动作映射等,使得Struts2在处理用户请求...

Global site tag (gtag.js) - Google Analytics