struts实现文件下载
一、页面
这个页面的里面的简历资料就是我们的下载入口。
<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<LINK href="${pageContext.request.contextPath}/css/Style.css" type="text/css" rel="stylesheet">
<script language="javascript" src="${pageContext.request.contextPath}/js/public.js"></script>
</HEAD>
<body>
<form id="userAction_save_do" name="Form1" action="${pageContext.request.contextPath}/user/userAction_save.do" method="post" enctype="multipart/form-data">
<table cellSpacing="1" cellPadding="5" width="100%" align="center" bgColor="#eeeeee" style="border: 1px solid #8ba7e3" border="0">
<tr>
<td class="ta_01" align="center" bgColor="#afd1f3" colSpan="4"
height="26">
<strong><STRONG>查看用户</STRONG>
</strong>
</td>
</tr>
<tr>
<td width="18%" align="center" bgColor="#f5fafe" class="ta_01">
登录名: <s:debug />
</td>
<td class="ta_01" bgColor="#ffffff">
<s:property value="model.logonName"/>
</td>
<td align="center" bgColor="#f5fafe" class="ta_01">
用户姓名:
</td>
<td class="ta_01" bgColor="#ffffff">
<s:property value="model.userName"/>
</td>
</tr>
<tr>
<td align="center" bgColor="#f5fafe" class="ta_01">
性别:
</td>
<td class="ta_01" bgColor="#ffffff">
<s:property value="model.sex"/>
</td>
<td align="center" bgColor="#f5fafe" class="ta_01">
学历:
</td>
<td class="ta_01" bgColor="#ffffff">
<s:property value="model.education"/>
</td>
</tr>
<tr>
<td align="center" bgColor="#f5fafe" class="ta_01">
出生日期:
</td>
<td class="ta_01" bgColor="#ffffff">
<s:property value="model.birthday"/>
</td>
<td align="center" bgColor="#f5fafe" class="ta_01">
电话:
</td>
<td class="ta_01" bgColor="#ffffff">
<s:property value="model.telephone"/>
</td>
</tr>
<tr>
<td align="center" bgColor="#f5fafe" class="ta_01">
兴趣爱好:
</td>
<td class="ta_01" bgColor="#ffffff" colSpan="3">
<s:property value="model.interest"/>
</td>
</tr>
<tr>
<td align="center" bgColor="#f5fafe" class="ta_01">
简历资料:
</td>
<td class="ta_01" bgColor="#ffffff" colSpan="3">
<s:a action="user_download" namespace="/" cssClass="cl_01">
<s:param name="userID" value="model.userID"></s:param>
<s:property value="model.filename"/>
</s:a>
</td>
</tr>
<TR>
<TD class="ta_01" align="center" bgColor="#f5fafe">
备注:
</TD>
<TD class="ta_01" bgColor="#ffffff" colSpan="3">
<s:property value="model.remark"/>
</TD>
</TR>
<TR>
<td align="center" colSpan="4" class="sep1">
<img src="${pageContext.request.contextPath}/images/shim.gif">
</td>
</TR>
<TR>
<td class="ta_01" style="WIDTH: 100%" align="right" bgColor="#f5fafe" colSpan="4">
<FONT face="宋体"></FONT>
<INPUT class="button_ok" type="button" onclick="history.go(-1)" value="返回"/>
<span id="Label1"></span>
</td>
</TR>
</table>
</form>
</body>
</HTML>
二、action类
下载的时候,我们需要下载的文件输入流,MIME类型和文件名。
1、根据用户id查询到用户。
2、根据用户获取到文件输入流。
3、根据用户获取文件名。
4、在下载的时候可能会出现名称乱码,所以我们需要用encodeDownloadFilename方法解决。
/**
* 下载简历 (struts2 下载 一个流、 两个头信息)
*
* @return
*/
public String download() {
UserService userService = new UserService();
user = userService.findById(user.getUserID());
return "downloadSUCCESS";
}
// 返回文件流
public InputStream getInputStream() throws IOException {
if (user == null || user.getPath() == null) {
return null;
}
File file = new File(ServletActionContext.getServletContext()
.getRealPath(user.getPath()));
return new FileInputStream(file);
}
// 返回简历 MIME类型
public String getContentType() {
if (user == null || user.getFilename() == null) {
return null;
}
return ServletActionContext.getServletContext().getMimeType(
user.getFilename());
}
// 返回编码后的文件名
public String getDownloadFilename() throws IOException {
if (user == null || user.getFilename() == null) {
return null;
}
return encodeDownloadFilename(user.getFilename(), ServletActionContext
.getRequest().getHeader("user-agent"));
}
/**
* 下载文件时,针对不同浏览器,进行附件名的编码
*
* @param filename
* 下载文件名
* @param agent
* 客户端浏览器
* @return 编码后的下载附件名
* @throws IOException
*/
public String encodeDownloadFilename(String filename, String agent)
throws IOException {
if (agent.contains("Firefox")) { // 火狐浏览器
filename = "=?UTF-8?B?"
+ new BASE64Encoder().encode(filename.getBytes("utf-8"))
+ "?=";
} else { // IE及其他浏览器
filename = URLEncoder.encode(filename, "utf-8");
}
return filename;
}
三、struts.xml文件配置
<result name="downloadSUCCESS" type="stream">
<!-- 下载流 getInputStream -->
<param name="contentType">${contentType}</param>
<param name="contentDisposition">attachment;filename=${downloadFilename}</param>
</result>
就此,我们就实现了文件下载的功能。
分享到:
相关推荐
《SSM框架整合详解——基于spring-mybatis-struts2-master的实战分析》 在Java Web开发领域,SSM(Spring、Struts2、MyBatis)框架的组合被广泛使用,因其灵活性和强大的功能而备受青睐。本篇文章将深入探讨这个...
- 其次,配置Struts2的核心配置文件(struts.xml),启用插件并指定主题样式。 3. **使用jQuery UI组件** - 插件提供了一系列的标签库,可以直接在JSP页面中使用,例如`<s:jquery>`、`<sj:datepicker>`、`...
轻量级 J2EE 企业应用实战 -- Struts+Spring+Hibernate 整合开发笔记 本资源为轻量级 J2EE 企业应用实战开发笔记,涵盖 Struts、Spring 和 Hibernate 三大框架的整合开发实践。笔记从 JDK 安装和配置环境变量开始,...
对于开发者来说,熟悉Struts 2.3.14-Pro意味着要掌握Action类、配置文件(struts.xml)、拦截器、结果类型、动态方法调用等关键概念。此外,理解OGNL的使用和安全注意事项也是必不可少的。 7. **实战应用**: 在...
Struts2-upfile是一个基于Apache Struts2框架的文件上传示例项目,主要目标是实现用户端图片的上传功能。这个项目对于理解Struts2框架中的文件上传处理机制及其配置非常有帮助。以下是对相关知识点的详细说明: 1. ...
9. **实战案例**:作者通过具体的实例,如电子商务系统、内容管理系统等,展示了如何实际运用Struts框架来构建Java Web项目。 通过学习《精通Struts --基于MVC的JavaWeb设计与开发》,开发者不仅可以掌握Struts框架...
3. **配置文件**:Struts 2 使用 XML 配置文件(struts.xml)来定义 Action 映射、拦截器链、结果类型等,使得应用程序的配置清晰且可维护。 4. **OGNL(Object-Graph Navigation Language)**:Struts 2 使用 OGNL...
Struts 是一个开源的Java Web框架,由Apache软件基金会维护,主要用于...通过阅读《Struts教程.doc》,你将能全面了解Struts的各个方面,包括安装配置、基本概念、实战示例等,从而在实际项目中更好地运用Struts框架。
常见的Result类型有dispatcher(将控制权交给Servlet容器),stream(直接输出流,常用于下载或发送文件),freemarker(渲染FreeMarker模板),jsp(渲染JSP页面)等。 5. **OGNL(Object-Graph Navigation ...
通过这个“struts2-网络通讯录”项目,开发者可以学习到如何构建一个基本的Web应用,包括用户认证、数据库交互、表单处理、错误处理等多个核心环节,对于提升Struts2框架的实战技能非常有帮助。
总的来说,这个压缩包提供了一套完整的Struts2开发环境,包括必要的依赖和一个实战案例。通过解压和学习其中的内容,开发者可以了解和掌握如何构建和运行一个基于Struts2的Web应用。同时,这些组件的版本选择也是...
Struts2-i18n是一个专门针对Struts2框架实现的国际化(i18n)解决方案。在Web开发中,国际化是一项重要...通过合理的资源文件管理和Struts2提供的组件,我们可以轻松实现多语言支持,为全球用户提供更友好的用户体验。
这四个子文件中,`struts-2.2.3 -all lib.zip`包含了Struts2的全部依赖库,这些库文件是构建Struts2应用所必需的。而`hibernate-distribution-3.3.1.GA.zip`可能是Hibernate的完整发行版,包括了除JAR文件外的其他...
2. **配置文件**:`struts.xml`是Struts2的核心配置文件,用于定义Action、Result和拦截器链。 3. **Action类**:Action类是业务逻辑的载体,处理用户请求并返回结果。 4. **结果类型**:结果类型定义了Action执行后...
标签中提到的"struts2插件 rest例子"进一步强调了这个示例项目是关于Struts2 REST插件的实战应用,对于初学者或者需要在现有项目中添加REST功能的开发者来说,这是一个很好的学习和参考资源。 压缩包中的"RestDemo...
压缩包中的示例项目可以帮助初学者快速理解Struts2的工作原理和使用方式,通常包括基本的CRUD操作、表单验证、文件上传下载等常见功能。 8. **库文件(libs)**: "libs"目录下包含了Struts2框架运行所需的依赖库...
在本章"第3章【源码】java web整合开发实战--基于struts 2+hibernate+spring"中,我们将深入探讨如何在Java Web应用程序中集成三个关键的开源框架:Struts 2、Hibernate和Spring。这些框架分别负责控制层、持久层和...
Spring的核心是IoC(Inversion of Control),它允许开发者通过配置文件或注解来控制对象的生命周期和依赖关系。此外,Spring还提供了数据访问、事务管理、邮件服务、Web服务等功能模块,大大简化了企业级应用的开发...
- **struts.xml**:主要的配置文件,用于配置Action、拦截器、结果类型等。 - **其他配置**:如可以通过properties文件进行国际化配置,或使用注解进行Action的配置。 ##### 4.2 最佳实践 - **重用Action配置**:...