`
Kenny.Lee
  • 浏览: 514537 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

浅谈Struts2数据下载和AJAX服务端接口的实现

 
阅读更多

在struts2中实现文件或特定数据格式文件下载其实并不难的。

 

一,struts2配置文件示例,见下面代码:

 

	<package name="export" namespace="/export" extends="struts-default">
		<action name="test" class="exportAction">
			<result name="success" type="stream">
				<param name="contentType">text/plain</param>
				<param name="inputName">inputStream</param>
				<param name="contentDisposition">filename="${fileName}"</param>
				<param name="bufferSize">4096</param>
			</result>
		</action>
	</package>

 

 

说明:

1 .class="exportAction"

    exportAction是spring配置好的实例。因为这里我是集成spring,给spring管理。

 

2.<result name="success" type="stream">

type="stream" 不用多说了吧,我们这里返回的是stream。若有问题请查看struts2的result中的type说明。

 

3.stream的几个相关参数

 

 

contentType  声明stream的内容类别,常用的如:text/plain、application/zip、text/html等
inputName

 inputStream类型的参数,action中必须有get此输入流的名字的方法,最主要的参数。这里特别注意一下,你想action实现下载的文件也好,实现输出数据也好,都必须配置好此inputStream。

拿上面配置为例,即必须有:

 

	/**
	 * @return the inputStream
	 */
	public InputStream getInputStream() {
		return inputStream;
	}
 
contentDisposition 内容报头。一般用来指定下载文件的名字。注意参数中我用了一个${fileName}来指定文件的名字。是因为一般下载的文件都是动态的,并且这个文件若有中文,也不能直接写在配置文件上,不然会出现乱码。同样的,action中必须有定义fileName的getFileName的方法。
bufferSize 比较好理解,指定缓存区的大小。

 

二,中文乱码问题

就以刚刚的fileName为例,一般都需要指定文件名的编码格式乱码才会正常。具体参考如下:

 

 

 

fileName = new String("测试下载.dbf".getBytes("GBK"), "ISO8859-1");
 
然后记得保证action中有下面方法:

	/**
	 * @return the fileName
	 */
	public String getFileName() {
		return fileName;
	}
 
注意,编码是为GBK,就算项目中是UTF8也好。因为这里的乱码问题大多是由于操作系统的浏览器引起的,所以只有GBK才会正常。

三,AJAX接口的实现。
很多时候,我们会用到struts2来制作AJAX的服务端接口。

这里,我们用两个参数便可以了。
			<result name="success" type="stream">
				<param name="contentType">text/html</param>
				<param name="inputName">inputStream</param>
			</result>
 
然后在action中,我们需要把返回的AJAX数据(即string)转成inputStream,但记得也要指定编码,因为这里也会出现乱码的情况。

在这,我分享一个units方法:
	public static InputStream stringToInputStream(String str) {
		if (str == null) {
			str = StringUtils.EMPTY;
		}
		InputStream in = null;
		try {
			in = new ByteArrayInputStream(str.getBytes(DEFAULT_ENCODING));
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return in;
	}
 
DEFAULT_ENCODING:我使用的是UTF-8,与项目默认编码一致。

PS:也可以用struts2提供的JSON plugin来实现,不过个人更喜欢用inputStream来自己构造JSON体,因为这样更加自由,遇到复杂的多层列表的JSON时也可以游刃有余。

四,题外,有时候也许会遇到下载文件的时候会只支持outputStream的情况。但struts2这个配置只支持inputStream,所以,我们也需要把outputStream转成inputStream。

		ByteArrayOutputStream out = new ByteArrayOutputStream();
		writer.setCharactersetName("GBK");
		writer.write(out);
		inputStream = new ByteArrayInputStream(out.toByteArray());
		fileName = new String("测试下载.dbf".getBytes("GBK"), "ISO8859-1");
		return SUCCESS;
 
0
1
分享到:
评论

相关推荐

    Struts2+Jquery+Ajax

    8. 实例演示:使用Struts2+Jquery+Ajax实现动态加载数据或表单验证 "struts2 jar"文件包含了Struts2框架的核心库,可能包括struts2-core、struts2-convention、struts2-json-plugin等依赖,这些是开发Struts2应用必...

    struts2+Mysql搭建的服务端 +android 客户端 post,get请求

    Struts2和MySQL是开发Web应用的常用技术组合,它们为服务端提供了强大的处理能力和数据库存储功能。在Android客户端与服务端的交互中,HTTP协议是连接两者的关键桥梁,允许客户端通过POST和GET请求发送数据并接收...

    struts2ajax项目

    总的来说,"struts2ajax"项目展示了如何在Struts2框架下,结合jQuery的Ajax功能,实现页面的异步数据交互。通过这个项目,你可以学习到Struts2的Action配置、Ajax请求的发送与接收、以及前端和后端的数据处理。这将...

    struts2的Ajax实现注册验证

    总的来说,Struts2和Ajax的结合使用使得Web应用能够提供更快速、更直观的用户交互,而这个代码和jar包组合可能就是实现这一目标的一个实例。通过阅读提供的文档和使用示例,你可以深入了解并实践这一技术,从而提升...

    struts2+jquery+ajax文件异步上传

    Struts2、jQuery和Ajax是Web开发中的三个关键组件,它们共同构成了文件异步上传的基础框架。这个项目是在MyEclipse环境下实现的一个简单的文件上传功能,让我们深入了解一下这些技术及其在文件上传中的应用。 首先...

    struts2+json+jquery实现ajax数据的存取

    通过以上步骤,"Struts2+JSON+jQuery实现Ajax数据的存取"能够有效地提高Web应用的交互性和响应速度,使得用户在不刷新整个页面的情况下,也能获取并处理服务器的新数据。在实际项目中,这通常用于实现表格数据的分页...

    Struts2与AJAX

    Struts2为了满足这种需求,实现了与AJAX的无缝集成,提供了一流的AJAX支持。 Struts2的AJAX支持并不是从零开始创建一个新的AJAX框架,而是选择了当时在Java EE平台上广泛使用的AJAX库,如Dojo和Direct Web Remoting...

    Struts2与Ajax 精简源码

    Struts2与Ajax 的实现原理,于Servlet+Ajax原理是一致的,都是通过后台的response.getWriter().print("");把数据传输给前台的。 前台Ajax格式如下(需要导入ajax库,比如:jquery-1.11.3.js) 格式: $(function()...

    struts2实现ajax

    Struts2是一个非常流行的Java Web框架,它提供...通过以上步骤,开发者可以在Struts2框架下轻松地实现Ajax功能,提高Web应用的交互性和用户体验。理解并熟练掌握这些知识点,对于开发高效、用户友好的Web应用至关重要。

    Struts2整合jQuery实现Ajax功能

    ### Struts2整合jQuery实现Ajax功能 #### 一、引言 随着Web应用程序的发展,用户对交互性和响应速度的要求越来越高。传统的Web表单提交方式已无法满足这些需求,因此Ajax技术逐渐成为提升用户体验的重要手段之一。...

    Struts2+Spring+Ajax实现的用户登录

    Struts2、Spring和Ajax是Java Web开发中的三个重要框架,它们协同工作可以构建出高效、灵活的Web应用程序。在用户登录场景中,这三者的结合尤为重要,它们各自承担着不同的职责,共同确保用户能够方便、安全地进行...

    AJAX 想Struts2后台传送Json数据并向前台返回Json格式的数据

    以上就是使用AJAX和Struts2进行JSON数据交换的基本流程和实现方法。通过这种方式,你可以实现无刷新的交互式Web应用,提高用户体验。同时,Struts2提供的强大功能和灵活性使得这种交互变得简单易行。记得在实际开发...

    ZTree+Struts2+ajax+json实现checkbox权限树

    【标题】"ZTree+Struts2+ajax+json实现checkbox权限树"涉及的技术栈主要集中在前端的ZTree,后端的Struts2框架,以及数据交互中的Ajax和JSON。这个项目的核心目标是构建一个可复选的权限树形结构,用户通过勾选节点...

    Struts2接口文档

    总的来说,Struts2接口文档是学习和使用Struts2框架不可或缺的工具,它能帮助开发者高效地理解和使用框架提供的各种组件和接口,提升开发效率,减少错误,并有助于深入理解MVC模式在实际项目中的应用。通过仔细研读...

    Struts2整合jQuery实现Ajax功能.doc

    总结来说,Struts2整合jQuery实现Ajax功能,可以让前端和后端之间进行无缝通信,提供更加动态的用户体验。通过使用jQuery简化Ajax操作,开发者可以专注于业务逻辑而不是繁琐的异步请求处理。同时,Struts2的Action...

    Struts2 + jQuery 实现ajax.txt

    ### Struts2 + jQuery 实现Ajax交互的关键技术与实践 #### 概述 在Web开发领域,使用Struts2框架结合jQuery实现Ajax交互是一种常见的做法。这种组合不仅可以提高Web应用程序的响应速度,还能显著提升用户体验。...

    Jquery struts2 json 实现ajax

    标题 "Jquery struts2 json 实现ajax" 涉及到的是在Web开发中使用jQuery库与Struts2框架结合处理JSON数据的Ajax技术。这个主题主要关注如何通过前端的jQuery实现异步请求,与后端的Struts2框架进行交互,从而更新...

    使用struts2 和ajax进行传递json数据

    综上所述,Struts2和Ajax的结合使用,能够实现高效的前后端数据交互,通过JSON数据格式,使数据传输更加便捷和高效。在实际项目中,开发者应熟练掌握这两种技术的结合,以提高Web应用的用户体验。

    struts2中AJAX实现

    综上所述,Struts2与AJAX的结合使得Web应用能够实现无刷新的用户体验,提高了交互性和效率。理解并熟练掌握这一技术,对于提升Web应用的质量和用户体验至关重要。在实际开发中,开发者还需要考虑错误处理、安全性...

Global site tag (gtag.js) - Google Analytics