struts2的下载功能实现流程包括三个方面,jsp页面,xml配置文件,Action类。
首先我前台页面效果如下:
发送请求通过form表单的形式,文件名称及文件类型存储在hidden类型的input标签里,“下载文档”超链接也包含在form表单之中,点击超链接在downFile方法中提交表单请求。
代码:
<form id="${guide.bhc101}" action="ggcx/download.html?currentPage=${currentPage}" method="post"> <input type="hidden" name='fileName' value='${guide.bhc102}'/> <input type="hidden" name='type' value="application/msword"/> <a style="cursor: pointer;color: red;" onclick="javascript:queryGuide('${guide.bhc101}')">查看</a> <a style="cursor: pointer;color: red;" onclick="downloadFile('${guide.bhc101}')">下载文档</a> </form>
因为项目中文章对应的下载文档命名格式是标题.doc或者标题.docx的word文档,所以fileName的value值保存的是文章的标题,type的value值则是"application/msword",这是doc格式在程序的表示字符串。
列举一下主流格式文件在程序中对应的字符串:
到了这里,有一点需要说明一下,其实单纯使用a标签发送请求也是可以实现的,但是如果a标签的href属性中带有中文那么后台接收会产生中文乱码,所以在这里我使用form表单的形式来发送请求,保证后台 能接收到正确的中文。如果有更好的方法也请和我说一下,谢谢!
接下来,就要处理struts2的配置文件:
<action name="download" class="admin.action.DownLoadAction" method="checkFile"> <!--设置找不到文件情况的请求转发--> <result name="fileNotFound" type="chain"> <param name="actionName">jgcspublic</param> <param name="namespace">/ggcx</param> </result> <!--设置响应类型为stream--> <result name="success" type="stream"> <param name="contentType">${type}</param> <!--设置下载文件的名字 ,attachment表示弹出对话框提示下载--> <param name="contentDisposition">attachment;filename=${fileName}</param> <!--设置Action中输出流的函数--> <param name="inputName">guideFile</param> </result> </action>
"fileNotFound"的result 表示找不到文件的处理方法,通过chain模式转发ggcx包下的jgcspublic请求。
"success"的result则表示执行下载文件的方法。
contentType:文件的类型
contentDirposition:文件名称
inputName:返回输出流的方法名,则在Action中方法名命名应是getGuideFile()
发送请求后的第一步会调用checkFile方法,来检查标题.doc的文件是否存在,如果不存在会再检查标题.docx的文件是否存在。
如果存在返回"success",然后就是自动转到inputName属性指定的方法即是将下载文件转成Stream流回给页面的方法。
如果不存在文件,则转发jgcspublic请求,这是查询列表的请求,因为在前台form表单请求时我已经带上了当前页的值,通过chain的方式能保留传递的参数 ,于是当jgcspublic 请求完成时还能回到点击下载时的页面。
DownLoadAction类的代码:
public class DownLoadAction extends ActionSupport { private String fileName; private String type; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getFileName() { try{ ServletActionContext.getResponse().setHeader("charset","ISO8859-1"); return new String(this.fileName.getBytes(), "ISO8859-1"); } catch (UnsupportedEncodingException e) { return "获取文件名出现了错误!"; } } public void setFileName(String fileName) { this.fileName = fileName; } public String checkFile(){ String path = ServletActionContext.getServletContext().getRealPath("/download/guide/"+fileName + ".doc"); File file = new File(path); if(file.exists()){ return SUCCESS; } else{ type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; path = path.substring(0, path.length()-4) + ".docx"; file = new File(path); if(file.exists()){ return SUCCESS; } } return "fileNotFound"; } public InputStream getGuideFile(){ if(type.equals("application/msword")){ return ServletActionContext.getServletContext().getResourceAsStream("/download/guide/"+ fileName + ".doc"); } else{ return ServletActionContext.getServletContext().getResourceAsStream("/download/guide/"+ fileName + ".docx"); } } }
需要注意的是在getFileName()方法还要进行一定的处理,必须要修改响应的编码格式,以保证文件名回到页面时还是正确中文 ,不然还会是一串乱码的哦。
正确的下载页面:
其实实现struts2的下载功能并不难,关键在于保证中文从前台传到后台 和从后台传到前台的正确性,以及找不到文件情况下的请求转发。整个流程保持合理的逻辑处理就行,希望这篇文章对学习struts2下载的朋友有所帮助,分享互勉!
相关推荐
Struts2是一个非常流行的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在处理文件下载时,Struts2提供了一套完整的解决...通过以上步骤,开发者应该能够解决类似问题,实现无乱码的文件下载功能。
Struts2是一个强大的Java Web...总之,解决Struts2中的中文乱码问题,关键在于配置正确的字符编码,并在文件上传和下载过程中处理好编码转换。通过以上步骤,你可以有效地在Struts2项目中实现对中文URL和文件名的支持。
Struts2是一个流行的Java Web框架,它提供了丰富的功能来处理HTTP请求,包括文件上传和下载。在处理中文文件名时,由于编码问题,可能会遇到乱码的问题。这个问题在早期的互联网资源中被广泛讨论,但并非所有解决...
7. **文件上传**:在处理文件上传时,如Struts 2的`FileUpload`插件,需要确保文件名的编码正确处理,例如: ```java String fileName = new String(file.getName().getBytes("ISO-8859-1"), "UTF-8"); ``` 通过...
解决方法是更新Struts2到2.1.8.1或更高版本,并确保使用最新的`StrutsPrepareAndExecuteFilter`过滤器。 3. **GET乱码问题**: GET请求的乱码问题通常与服务器配置有关。在Struts2的各个版本和不同过滤器设置下,...
当Struts2应用在JSP页面中尝试加载并显示这些文本时,可能会遇到乱码问题,尤其是在处理中文等非英文字符时更为常见。 乱码问题的根源在于字符编码的不匹配。当资源文件的编码格式与JSP页面或服务器解析时所使用的...
在Struts2框架中,中文乱码问题通常发生在数据传输过程中,尤其是从客户端到服务器端的数据传递,或者是在服务器内部处理时出现编码不一致导致的问题。具体原因可能包括: 1. **客户端与服务器端编码设置不一致**:...
在处理文件下载时,可能会遇到中文文件名乱码的问题,这主要是由于字符编码不一致导致的。以下是对这个问题的详细分析及解决方案: 首先,问题出现在文件列表的展示和下载链接的生成过程中。在Action中,`request....
### Struts2乱码终极解决办法 #### 一、引言 在开发基于Struts2框架的应用时,经常遇到的一个问题就是中文乱码。这不仅影响用户体验,还可能导致数据处理错误...希望本文能帮助到正在解决Struts2乱码问题的开发者们。
### Struts2中文乱码问题解决方案 在使用Struts2框架进行Web开发的过程中,中文乱码问题是一个常见的挑战。这不仅影响用户体验,还可能导致数据不一致等问题。为了解决这一问题,我们需要理解其背后的原理,并采取...
### Struts 1.2 中文乱码问题详解与解决方案 #### 一、问题背景及原因分析 在 Web 应用开发过程中,特别是在使用 Java 的 Struts 1.2 框架时,中文乱码问题是开发者经常遇到的一个难题。这不仅影响用户体验,还会...
本文将深入探讨如何在Struts2.0中解决中文乱码问题,确保应用程序能够正确地处理和显示中文字符。 ### Struts2.0中文乱码问题分析 #### 1. 表单提交中文乱码 在Web应用中,表单是用户与服务器交互的主要方式之一...
本文将深入探讨一个关于Struts2在Internet Explorer(IE)浏览器中出现中文乱码的奇怪问题及其解决方案。 首先,中文乱码问题通常涉及到几个关键因素:数据库编码、开发文件编码和网页的Content-Type编码。在确保这...
在处理文件上传和下载时,Struts2可能会遇到一个常见的问题,即中文文件名的乱码问题。这是因为不同的系统和软件对字符编码的支持不同,尤其是涉及到网络传输时,编码的兼容性尤为重要。 在“struts2 中文文件名...
总的来说,解决JSP Struts2 URL传参中文乱码问题的关键在于确保整个应用系统的字符编码链路一致,包括但不限于客户端请求、服务器接收、应用处理、数据库存储等多个环节。通过设置合理的编码参数和过滤器,可以有效...
### Struts2中文乱码问题解析与解决方案 #### 一、问题背景 在使用Struts2框架进行Web应用开发时,经常会遇到中文乱码的问题。这不仅会影响用户体验,还可能导致数据处理错误。本文将深入分析Struts2中文乱码的原因...
默认情况下,Struts并不会自动处理请求的编码问题,因此需要我们在Struts配置文件(struts-config.xml或struts.xml)中进行设置。可以添加一个全局的Filter,如`CharacterEncodingFilter`,并配置其`encoding`属性为...
### Struts处理中文乱码问题总结 #### 一、引言 在使用Struts框架进行Web应用程序开发过程中,中文乱码问题是开发者经常会遇到的技术难题之一。这类问题虽然看似不起眼,但如果处理不当,则可能会影响到用户体验...
本教程将深入探讨如何在Struts框架中实现文件的上传与下载功能,并解决在处理中文文件名时可能出现的乱码问题。 首先,让我们了解文件上传的基本流程。在Struts中,文件上传主要依赖于Apache Commons FileUpload库...
### Struts乱码解决方法详解 #### 一、引言 在使用Struts框架进行Web应用开发时,可能会遇到字符编码问题导致的数据显示乱码。本文将详细介绍如何解决Struts项目中的乱码问题,帮助开发者确保数据正确无误地显示。...