`

Struts2day04Struts2.0文件的下载

 
阅读更多

1.写一个Action,在DownloadAction extends ActionSuport

package com.jsu.struts2.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport{
	private List<String> fileNames;
	private String fname;
	private InputStream downFile;//传给用户的是一个文件流
	/*获得文件夹中的所有文件名称*/
	public String findAll(){
		String path =ServletActionContext.getServletContext().getRealPath("/upload");
		File file  = new File(path);
		File [] files = file.listFiles();
		fileNames = new ArrayList<String>();
		for (File f:files) {
			fileNames.add(f.getName());
		}
		return "list";
	}
	/*执行下载操作*/
	@Override
	public String execute() {
	//获得文件的路径
		String path =ServletActionContext.getServletContext().getRealPath("/upload");
		System.out.println(path);
		String fileRealPath = path+"\\"+fname;
		System.out.println(fileRealPath);
		try {
				downFile = new FileInputStream(fileRealPath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		return "success";
	}
	public List<String> getFileNames() {
		return fileNames;
	}
	public void setFileNames(List<String> fileNames) {
		this.fileNames = fileNames;
	}
	public String getFname() {
		try {
			fname = new String(fname.getBytes(),"ISO-8859-1");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return fname;
	}
	public void setFname(String fname) {
		try {
		//这里编码格式为gbk,在jsp页面的头信息也要设置为gbk
			fname=new String(fname.getBytes("ISO-8859-1"),"gbk");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		this.fname = fname;
	}
	public InputStream getDownFile() {
		return downFile;
	}
	public void setDownFile(InputStream downFile) {
		this.downFile = downFile;
	}
	
	
}

 2.在download.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@taglib uri="/struts-tags" prefix="s" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head> </head>
  <body>
  <center>
  <h1>文件下载</h1>
	 <s:iterator var="file" value="fileNames">
	 <a href="down?fname=<s:property value="#file"></s:property>">
	 <s:property value="#file"></s:property></a>
	 </s:iterator>
   </center>
  </body>
</html>

 3.在struts.xml文件配置

<!-- 文件下载 -->
		<action name="down" class="com.jsu.struts2.action.DownloadAction">
		  <result name="list">/download.jsp</result>
		  <!-- 如果Struts2.0框架以流的形式反馈用户的时候,type="stream" -->
		  <result name="success" type="stream">
		    <!-- 指明那个属性是以流的形式反馈 -->
		    <param name="inputName">downFile</param>
		    <!-- 设置缓存区 -->
		    <param name="buffSize">1024</param>
		    <!-- 设置浏览器的打开方式:inline:打开直接显示;
		         attachment:浏览器以附件的形式进行存储
		         filename:文件的名称
		          -->
		    <param name="contentDisposition">attachment;filename=${fname}</param>
		  </result>
		</action>

 4.地址栏访问:http://localhost:8080/struts2_04/down!findAll.action

       注意:upload文件夹下面一定要有文件。

分享到:
评论

相关推荐

    达内培训机密资料_struts2_day01(3)

    - **配置Struts2框架**:通过Maven或手动下载Struts2的相关jar包,并将其添加到项目的类路径中。 - **创建项目**:在IDE中新建一个Web项目,并导入Struts2的依赖。 #### 2. 创建Action类 Action类是Struts2的核心...

    java视频教程Day01 免费

    2. Identifier,keyword and types (标示符, 关键字和数据类型) 3. Expression and Flow Control (表达式和流控制) 4. Array (数组) 5. Object-Oriented Programming I (类与对象I) 6. Object-Oriented ...

    spring-day01

    5. **方便集成其他框架**:Spring可以轻松地与其他流行的框架如Hibernate、Struts等集成。 6. **降低Java EE API的使用难度**:Spring对一些复杂的Java EE API进行了封装,使得它们更加易用。 ### 程序的耦合及解耦...

    Java架构设计-day1.pdf

    2. 简化开发:Spring提供的丰富抽象减少了需要编写的代码量,使得开发者可以专注于业务逻辑的实现,而不必深陷于底层资源的处理。 3. 支持AOP编程:AOP是OOP编程的有益补充,通过Spring的AOP支持,可以方便地将日志...

    整理后java开发全套达内学习笔记(含练习)

    short 16bit, -2^15~2^15-1 (2^15=32768) int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字) long 64bit, -2^63~2^63-1 (900亿亿,20位有效数字) float 32bit, 9位有效数字,含小数(四舍五入)(小数点算...

    金融Web应用系统漏洞分析方法.pdf

    第一,主动式(全自动)Web2.0漏洞扫描,通过常见的漏洞扫描器自动化检测,利用fuzz技术填充攻击性数据,关注Web2.0的自动交互,但这种方法对高交互式应用的处理能力有限。第二,半自动式漏洞分析,结合业务重放和高...

    基于网络全流量及威胁情报的高级威胁检测体系建设.pptx

    - **流量异常检测**:针对Weblogic、Struts2等漏洞利用,以及恶意软件、勒索病毒的传播进行监控。 - **内网威胁管理**:防止内网终端和服务器染毒,监控内网注入和数据泄露。 - **0DAY漏洞与未知威胁**:通过深度...

    freemarker总结

    options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true. ...

Global site tag (gtag.js) - Google Analytics