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文件夹下面一定要有文件。
发表评论
-
struts2day06 自定义结果
2012-07-16 12:14 683类implements Result接口 或者 extends ... -
struts2day06 Struts2.0的result
2012-07-16 12:01 958Struts2.0的result Action ... -
struts2day06学习笔记
2012-07-16 10:55 8601.new String(xxx.getBytes(),&qu ... -
struts2day05异常处理
2012-07-13 23:13 838Struts2.0的异常处理机制 1.什么是异常?软件在 ... -
Struts2day05学习笔记
2012-07-13 22:19 6851.自定义拦截器 1.im ... -
Struts2day04Struts2.0文件的上传
2012-07-13 08:20 6531、在服务器端提供一个文件夹存放提交的文件,upload文件夹 ... -
Struts2day04Struts2.0实现阻止表单重复提交
2012-07-12 21:01 6471.使用叫做token的拦截器,在表单中加入<s:tok ... -
Struts2day04对Action的方法进行过滤拦截
2012-07-12 20:38 17851.写一个Action类 UserManagerAction ... -
Struts2day04判断用户是否登录
2012-07-12 19:37 8801.在拦截器中获得用户登录的session 在LoginC ... -
Struts2day04测试程序的执行效率,拦截器栈,在Action中覆盖拦截器的属性值
2012-07-12 18:58 11881.在LoginAction.java中,extends Ac ... -
Struts2学习笔记day04
2012-07-12 00:31 6221.自定义类型转换 1.写一个类 extends S ... -
Struts2day03Struts2.0提供的数据格式校验
2012-07-11 21:52 721Struts2.0提供的数据格式校验 js校验:存在被 ... -
Struts2day03Struts2.0国际化
2012-07-11 21:09 782Struts2.0国际化 B/S结构中为网页提供多国 ... -
Struts2day03OGNL自定义类型转换
2012-07-11 20:47 817Struts2.0框架不能够或者不能完整的进行自动类型转换 ... -
Struts2学习笔记day03
2012-07-11 19:09 9541.值栈:ValueStack,存储数 ... -
Struts2day02多个对象提交
2012-07-10 07:15 1192在listUser.jsp页面 <%@ page la ... -
Struts2day02表单标签
2012-07-10 07:15 6691.在struts2Form.jsp中 <%@ ... -
struts2day02访问ValueStack中的数据以及访问Context中的对象
2012-07-10 07:14 10511.在show.jsp页面 <%@ page lang ... -
Struts2day02动态方法调用
2012-07-10 07:14 6571.在opt.jsp页面 <%@ page langu ... -
Struts2day02使用通配符调用指定的方法
2012-07-10 07:14 7331.在opt.jsp页面 <%@ page langu ...
相关推荐
- **配置Struts2框架**:通过Maven或手动下载Struts2的相关jar包,并将其添加到项目的类路径中。 - **创建项目**:在IDE中新建一个Web项目,并导入Struts2的依赖。 #### 2. 创建Action类 Action类是Struts2的核心...
2. Identifier,keyword and types (标示符, 关键字和数据类型) 3. Expression and Flow Control (表达式和流控制) 4. Array (数组) 5. Object-Oriented Programming I (类与对象I) 6. Object-Oriented ...
5. **方便集成其他框架**:Spring可以轻松地与其他流行的框架如Hibernate、Struts等集成。 6. **降低Java EE API的使用难度**:Spring对一些复杂的Java EE API进行了封装,使得它们更加易用。 ### 程序的耦合及解耦...
2. 简化开发:Spring提供的丰富抽象减少了需要编写的代码量,使得开发者可以专注于业务逻辑的实现,而不必深陷于底层资源的处理。 3. 支持AOP编程:AOP是OOP编程的有益补充,通过Spring的AOP支持,可以方便地将日志...
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位有效数字,含小数(四舍五入)(小数点算...
第一,主动式(全自动)Web2.0漏洞扫描,通过常见的漏洞扫描器自动化检测,利用fuzz技术填充攻击性数据,关注Web2.0的自动交互,但这种方法对高交互式应用的处理能力有限。第二,半自动式漏洞分析,结合业务重放和高...
- **流量异常检测**:针对Weblogic、Struts2等漏洞利用,以及恶意软件、勒索病毒的传播进行监控。 - **内网威胁管理**:防止内网终端和服务器染毒,监控内网注入和数据泄露。 - **0DAY漏洞与未知威胁**:通过深度...
options:该参数可以省略,指定包含时的选项,包含encoding和parse两个选项,其中encoding指定包含页面时所用的解码集,而parse指定被包含文件是否作为FTL文件来解析,如果省略了parse选项值,则该选项默认是true. ...