`
叶凡520
  • 浏览: 13542 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

Struts2下载问题再探

阅读更多

      其实有很多人都写过关于struts2下载问题的帖子或博文,但感觉说的不是很系统和清楚,所以笔者就自己的理解来总结一下自己对这个下载方法的理解和应用。

首先,struts2上传和下载比用原始的方法简便很多,所以它比较受亲睐,但要理解好了才能应用;

其次,它表面上看起来很简单但实际上里面的逻辑关系和参数关系比较复杂;

第三,很多人都写过这个代码但是很多时候会报错,如下图:

报着个错就是没有真正理解配置文件中路径问题,这个错误本身不是找不到输入流"targetFile"而是输入流没有找到你规定的要下载的文件,输入流就空(我在下面的Action代码中有判断输入流是否为空的if...else...语句)。

      先来看看代码,边看边解释吧。

1.JSP代码:

<a href="DownLoadAction.action">Excel下载</a>

 JSP显示效果如下图:

2.DownLoadAction代码:

先把几个参数或方法的作用介绍一下吧:

Sting inputPath(参数):这个是下载文件的全路径(包含名称),即从什么地方下载什么文件和下载的是那个文件;

InputStream  getTarGetFile()(方法):这个方法是为下载文件提供输入流,看其返回值就知道了,就是以流的形式读取文件,也可以说是下载文件的源;

注:要想真正体会这个参数和这个方法的作用和意义,还是看看配置文件后理解的更透彻。

package action;

import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class DownLoadAction extends ActionSupport {
	private String inputPath;

	// 依赖注入该属性值的setter方法
	public void setInputPath(String value) {
		inputPath = value;
	}
	//让Action获得targetFile属性,即输入流
	public InputStream getTargetFile() throws Exception {
		System.out.println("执行到这儿了吗?");
		if (ServletActionContext.getServletContext().getResourceAsStream(
				inputPath) == null) {
			System.out.println("路径:"+inputPath);
			System.out.println("输入流为空");
		} else {
			System.out.println("输入流不为空");
		}
		return ServletActionContext.getServletContext().getResourceAsStream(
				inputPath);
	}
	//让execute()方法来执行Action
	@Override
	public String execute() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("这个方法应该执行了!");
		return "success";
	}

}

 3.*struts.xml配置文件代码(重要)

<action name="DownLoadAction" class="action.DownLoadAction">
			<param name="inputPath">\test.xls</param>
			<result name="success" type="stream">
				<param name="contentType">application/vnd.ms-excel</param>
				<param name="inputName">targetFile</param>
				<param name="contentDisposition">filename="linux.xls"</param>
				<param name="bufferSize">1024</param>
			</result>
		</action>

 看这代码来逐行解释其含义:

<param name="inputPath">\test.xls</param>:这一行是告诉Action下载文件的路径,这个"\test.xls",不是随便的路径,是有要求的;

这个路径的真实含义:H:\MyEclipse  9\.metadata\.me_tcat\webapps\excel\test.xls,

解释下:MyEclipse  9是我的myeclipse的工作空间名称;

在其下有个.metadata文件夹;

再下一层有个.me_tcat\webapps;

而excel是我的项目的名称;

test.xls就是要下载的文件。

其实,这个路径就是javaweb项目在Tomcat下加载后"webapps\项目名称\要下载的文件名称"(我用的是myeclipse自带的Tomcat)。

<result name="success" type="stream">:这一行,name属性没什么好说的,至于type属性如果不懂得可以上百度上看看,struts2 Action配置相关文章,这里也不多说了。
<param name="contentType">application/vnd.ms-excel</param>:这一行也很重要,contentType属性标识要下载的文件的类型,下载的时候是以流的形式下载的,这个属性可以让Action知道下载后把这个文件写成什么类型的文件。

这个要是不了解不多的,可以参照http://baike.baidu.com/view/1547292.htm看看下面的常用类型。

 <param name="inputName">targetFile</param>:这一行是和Action中的那个getTargetFile()方法相对应,就是告诉Action一个输入流,让Action知道从哪儿读取文件流。
<param name="contentDisposition">filename="linux.xls"</param>:这一行中contentDisposition属性有一下作用:

Content-disposition头提供给浏览器确定HTTP响应内容的信息。当浏览器读到这些头信息后,它能确定:
A. HTTP响应包含一个文件;
B. 包含在响应中的文件名; 
C. 该文件是显示在浏览器主窗口中还是要用外部的应用查看;

这个属性可以不配置,也可以配置成"attachment"和"inline",配置成前者后servlet就指示浏览器把文件当成附件处理,而配置成后者servlet就指示浏览器把文件"内嵌"显示文件。

这个要是不了解不多的,可以参照http://wfwkiss.iteye.com/blog/528410看看详细的说明和解释。

<param name="bufferSize">1024</param>:这一行就很简单了,就是以字节为单位规定缓冲区的大小。
      好了,用了一个小时来总结这些,一方面是把自己学习过的知识有个总结,另一方面是可以帮助到那些对这些问题还不是很懂的朋友们,都1:30了,在不睡明天又起不了了。

      大家晚安!

  • 大小: 2.1 KB
  • 大小: 20.8 KB
分享到:
评论

相关推荐

    struts2实现文件下载功能

    在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...

    struts2资源下载,struts2资源下载

    在"struts2资源下载"中,我们可以获取到与Struts2相关的各种资料,包括但不限于教程、示例代码、API文档、安全补丁以及社区提供的插件等,这些都对学习和使用Struts2框架极其有益。 Struts2的核心功能包括: 1. **...

    struts2文件上传下载源代码

    在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...

    struts2jar包

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...

    K8 Struts2 Exp 20160516(Struts2综合漏洞利用工具)

    然而,随着其广泛应用,安全问题也逐渐凸显,其中最为知名的便是Struts2漏洞。在2016年5月16日,一个名为“K8 Struts2 Exp 20160516”的综合漏洞利用工具被发布,这标志着Struts2框架中存在严重的安全风险。 **...

    struts2下载地址

    ### Struts2下载地址及相关知识点 #### 一、Struts2简介 Struts2是一个开源的Web应用框架,它继承了Struts1的设计理念,并在此基础上进行了大量的改进和完善。Struts2是Apache软件基金会下的一个顶级项目,它采用...

    struts2项目开发

    Struts2 项目开发 Struts2 是一个基于 Java Web 的框架,广泛应用于 Web 应用程序的开发。下面将从 Struts2 项目开发的角度,详细介绍 Struts2 框架的应用、开发流程、技术架构、实践经验等方面的知识点。 项目...

    struts2 最新版 不用去官网上下载了

    在标题和描述中提到的"struts2 最新版"指的是Struts2框架的最新稳定版本,这里提供了一个无需到官方网站下载的途径。 Struts2的核心特性包括: 1. **Action和Result**: Struts2中的Action是业务逻辑的载体,它负责...

    Struts2漏洞检查工具Struts2.2019.V2.3

    "Struts2漏洞检查工具Struts2.2019.V2.3"是一个专门针对这些漏洞进行检测的工具,旨在帮助开发者和网络安全专业人员识别并修复Struts2框架中的安全问题。 Struts2的安全漏洞主要包括以下几类: 1. OGNL(Object-...

    struts2jar.zip

    Struts2是一个强大的Java web应用程序框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建可维护性、可扩展性良好的企业级应用的工具。这个"struts2jar.zip"压缩包包含了Struts2学习和研究的基础...

    struts2简单例子

    Struts2是一个强大的Java EE应用程序框架,用于构建MVC(模型-视图-控制器)架构的Web应用。这个“struts2简单例子”是初学者理解Struts2工作原理和核心概念的一个很好的起点。让我们深入探讨一下Struts2的基础知识...

    struts2所有jar包程序文件

    在下载并解压"struts2所有jar包"后,开发者需要将lib目录下的所有jar文件添加到项目构建路径中,确保运行时可以找到所有依赖。对于Maven或Gradle用户,可以通过在pom.xml或build.gradle文件中指定相应的依赖项,实现...

    Struts2+Jquery+Ajax

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,用于构建可维护性高、结构...在实际开发过程中,还需要关注安全问题,如Struts2的安全漏洞,确保应用的稳定性和安全性。

    Struts2教学视频

    Struts2是一个强大的Java web开发框架,用于构建可维护、可扩展且结构良好的应用程序。它在MVC(Model-View-Controller)设计模式的基础上提供了一种实现方式,使得开发者能够更方便地处理用户请求,控制业务逻辑,...

    struts2的各种jar包

    10. **插件系统**:Struts2的插件机制使得扩展和定制变得容易,比如Spring插件可以实现依赖注入,i18n插件处理国际化问题。 11. **开发工具集成**:Eclipse、IntelliJ IDEA等IDE都有Struts2的插件,可以帮助开发者...

    struts2-core.jar

    struts2-core-2.0.1.jar, struts2-core-2.0.11.1.jar, struts2-core-2.0.11.2.jar, struts2-core-2.0.11.jar, struts2-core-2.0.12.jar, struts2-core-2.0.14.jar, struts2-core-2.0.5.jar, struts2-core-2.0.6.jar,...

    Struts2视频教程

    - **文件上传与下载**:Struts2内置了对文件上传的支持,可以轻松实现文件上传功能;同时也可以配置下载功能,满足文件分发的需求。 - **权限控制**:利用拦截器实现细粒度的权限控制,确保只有授权用户才能访问敏感...

    struts2中文学习文档

    从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    struts2所需jar包 lib.zip

    Struts2是一个非常流行的Java Web开发框架,它基于MVC(Model-View-Controller)设计模式,用于构建可维护性高、结构清晰的企业级应用程序。Struts2的核心功能包括动作调度、视图渲染、结果映射、拦截器机制以及丰富...

Global site tag (gtag.js) - Google Analytics