在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;
分享到:
相关推荐
8. 实例演示:使用Struts2+Jquery+Ajax实现动态加载数据或表单验证 "struts2 jar"文件包含了Struts2框架的核心库,可能包括struts2-core、struts2-convention、struts2-json-plugin等依赖,这些是开发Struts2应用必...
Struts2和MySQL是开发Web应用的常用技术组合,它们为服务端提供了强大的处理能力和数据库存储功能。在Android客户端与服务端的交互中,HTTP协议是连接两者的关键桥梁,允许客户端通过POST和GET请求发送数据并接收...
总的来说,"struts2ajax"项目展示了如何在Struts2框架下,结合jQuery的Ajax功能,实现页面的异步数据交互。通过这个项目,你可以学习到Struts2的Action配置、Ajax请求的发送与接收、以及前端和后端的数据处理。这将...
总的来说,Struts2和Ajax的结合使用使得Web应用能够提供更快速、更直观的用户交互,而这个代码和jar包组合可能就是实现这一目标的一个实例。通过阅读提供的文档和使用示例,你可以深入了解并实践这一技术,从而提升...
Struts2、jQuery和Ajax是Web开发中的三个关键组件,它们共同构成了文件异步上传的基础框架。这个项目是在MyEclipse环境下实现的一个简单的文件上传功能,让我们深入了解一下这些技术及其在文件上传中的应用。 首先...
通过以上步骤,"Struts2+JSON+jQuery实现Ajax数据的存取"能够有效地提高Web应用的交互性和响应速度,使得用户在不刷新整个页面的情况下,也能获取并处理服务器的新数据。在实际项目中,这通常用于实现表格数据的分页...
Struts2为了满足这种需求,实现了与AJAX的无缝集成,提供了一流的AJAX支持。 Struts2的AJAX支持并不是从零开始创建一个新的AJAX框架,而是选择了当时在Java EE平台上广泛使用的AJAX库,如Dojo和Direct Web Remoting...
Struts2与Ajax 的实现原理,于Servlet+Ajax原理是一致的,都是通过后台的response.getWriter().print("");把数据传输给前台的。 前台Ajax格式如下(需要导入ajax库,比如:jquery-1.11.3.js) 格式: $(function()...
Struts2是一个非常流行的Java Web框架,它提供...通过以上步骤,开发者可以在Struts2框架下轻松地实现Ajax功能,提高Web应用的交互性和用户体验。理解并熟练掌握这些知识点,对于开发高效、用户友好的Web应用至关重要。
### Struts2整合jQuery实现Ajax功能 #### 一、引言 随着Web应用程序的发展,用户对交互性和响应速度的要求越来越高。传统的Web表单提交方式已无法满足这些需求,因此Ajax技术逐渐成为提升用户体验的重要手段之一。...
Struts2、Spring和Ajax是Java Web开发中的三个重要框架,它们协同工作可以构建出高效、灵活的Web应用程序。在用户登录场景中,这三者的结合尤为重要,它们各自承担着不同的职责,共同确保用户能够方便、安全地进行...
以上就是使用AJAX和Struts2进行JSON数据交换的基本流程和实现方法。通过这种方式,你可以实现无刷新的交互式Web应用,提高用户体验。同时,Struts2提供的强大功能和灵活性使得这种交互变得简单易行。记得在实际开发...
【标题】"ZTree+Struts2+ajax+json实现checkbox权限树"涉及的技术栈主要集中在前端的ZTree,后端的Struts2框架,以及数据交互中的Ajax和JSON。这个项目的核心目标是构建一个可复选的权限树形结构,用户通过勾选节点...
总结来说,Struts2整合jQuery实现Ajax功能,可以让前端和后端之间进行无缝通信,提供更加动态的用户体验。通过使用jQuery简化Ajax操作,开发者可以专注于业务逻辑而不是繁琐的异步请求处理。同时,Struts2的Action...
### Struts2 + jQuery 实现Ajax交互的关键技术与实践 #### 概述 在Web开发领域,使用Struts2框架结合jQuery实现Ajax交互是一种常见的做法。这种组合不仅可以提高Web应用程序的响应速度,还能显著提升用户体验。...
总的来说,Struts2接口文档是学习和使用Struts2框架不可或缺的工具,它能帮助开发者高效地理解和使用框架提供的各种组件和接口,提升开发效率,减少错误,并有助于深入理解MVC模式在实际项目中的应用。通过仔细研读...
标题 "Jquery struts2 json 实现ajax" 涉及到的是在Web开发中使用jQuery库与Struts2框架结合处理JSON数据的Ajax技术。这个主题主要关注如何通过前端的jQuery实现异步请求,与后端的Struts2框架进行交互,从而更新...
综上所述,Struts2和Ajax的结合使用,能够实现高效的前后端数据交互,通过JSON数据格式,使数据传输更加便捷和高效。在实际项目中,开发者应熟练掌握这两种技术的结合,以提高Web应用的用户体验。
综上所述,Struts2与AJAX的结合使得Web应用能够实现无刷新的用户体验,提高了交互性和效率。理解并熟练掌握这一技术,对于提升Web应用的质量和用户体验至关重要。在实际开发中,开发者还需要考虑错误处理、安全性...