以下内容是基于导入struts2-2.3.32.jar包来讲的

1.文件上传

A.单文件上传

<body>
<form action="${pageContext.request.contextPath }/one" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
</body>
 package com.rong.web.action;

 import java.io.File;

 import org.apache.commons.io.FileUtils;

 import com.opensymphony.xwork2.ActionSupport;

 public class MyAction extends ActionSupport {
private static final long serialVersionUID = -351587239525292420L;
//保存上传的文件对象,file对应表单元素名称,名称必须一致,拦截器会解析这个格式!
private File file;
//文件名,必须为fileFileName
    //FileName 固定的写法。必须为file+FileName
private String fileFileName;
//ContentType 固定的写法。必须为file+ContentType
private String fileContentType;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
} public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception {
//E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\ upload_1742945b_24ed_4612_a2f4_b83cffa61620_00000000.tmp
//struts会保存到Tomcat服务器的struts2文件夹中创建临时文件,若不处理,执行完代码会把此临时文件删除
System.out.println(file.getAbsolutePath());
//butterfly.jpg
System.out.println(fileFileName);
//image/png
System.out.println(fileContentType);
File targetFile=new File("c:/", fileFileName);
FileUtils.copyFile(file, targetFile);
return SUCCESS;
}
}

文件类型: mime-type想了解的可以去Tomcat服务器的web.xml文件查看,里面有文件类型配置

E:\apache-tomcat-7.0.82\conf\web.xml

限制文件上传大小:

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (81498) exceeds the configured maximum (1024)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置限制文件上传大小为1K -->
<constant name="struts.multipart.maxSize" value="1024"></constant>
<package name="default" namespace="/" extends="struts-default" > <global-results>
<!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
<result name="input">/input.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="one" class="com.rong.web.action.MyAction">
<result>/one.jsp</result>
</action>
</package>
</struts>

B.多文件上传

input的name属性值必须一致

<body>
<form action="${pageContext.request.contextPath }/one" method="post" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="file" name="file"/>
<input type="submit" value="上传"/>
</form>
</body>
 package com.rong.web.action;

 import java.io.File;

 import org.apache.commons.io.FileUtils;

 import com.opensymphony.xwork2.ActionSupport;

 public class MyAction extends ActionSupport {
private static final long serialVersionUID = -351587239525292420L;
//保存上传的文件对象,file对应表单元素名称,名称必须一致,拦截器会解析这个格式!
private File[] file;
//文件名,必须为fileFileName
private String[] fileFileName;
//文件类型,必须为fileContentType
private String[] fileContentType; public File[] getFile() {
return file;
} public void setFile(File[] file) {
this.file = file;
} public String[] getFileFileName() {
return fileFileName;
} public void setFileFileName(String[] fileFileName) {
this.fileFileName = fileFileName;
} public String[] getFileContentType() {
return fileContentType;
} public void setFileContentType(String[] fileContentType) {
this.fileContentType = fileContentType;
} @Override
public String execute() throws Exception {
if(file!=null){
for(int i=0;i<file.length;i++){
System.out.println(file[i]);
System.out.println(fileFileName[i]);
System.out.println(fileContentType[i]);
File targetFile=new File("c:/", fileFileName[i]);
FileUtils.copyFile(file[i], targetFile);
}
}
return SUCCESS;
}
}
E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000006.tmp
2018届毕业设计2017-6-8.rar
application/octet-stream
E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000007.tmp
nio1.png
image/png
E:\apache-tomcat-7.0.82\work\Catalina\localhost\struts2\upload_ca4933df_aa32_4fc4_bbd5_d5d887c68972_00000008.tmp
容杰龙.docx
application/vnd.openxmlformats-officedocument.wordprocessingml.document
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置限制文件上传大小为1000k -->
<constant name="struts.multipart.maxSize" value="10240000"></constant>
<package name="default" namespace="/" extends="struts-default" > <global-results>
<!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
<result name="input">/input.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="one" class="com.rong.web.action.MyAction">
<result>/one.jsp</result>
</action>
</package>
</struts>

限制允许上传的文件类型以及文件扩展名:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 配置限制文件上传大小为1000k -->
<constant name="struts.multipart.maxSize" value="10240000"></constant>
<package name="default" namespace="/" extends="struts-default" > <global-results>
<!-- struts在文件上传失败的时候,会返回input的错误视图,在这里配置对应的页面! -->
<result name="input">/input.jsp</result>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="error" exception="java.lang.Exception"></exception-mapping>
</global-exception-mappings>
<action name="one" class="com.rong.web.action.MyAction">
<!-- Action里设置默认拦截器栈 -->
<interceptor-ref name="defaultStack">
<!-- 限制允许上传的文件类型 -->
<param name="fileUpload.allowedTypes">image/png,text/plain</param>
<!-- 限制上传文件的扩展名 -->
<param name="fileUpload.allowedExtensions">txt,png,docx</param>
<!-- 以上两个参数同时配置取交集 -->
</interceptor-ref>
<result>/one.jsp</result>
</action> </package>
</struts>

如果出现异常,上传失败,却无法弹出jsp页面,可在Tomcat服务器的server.xml文件中修改:

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" maxSwallowSize="-1"/>

2.文件下载

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default" >
<action name="download" class="com.rong.web.action.MyAction">
<!-- 下载操作,name可以随意,但需要与返回值对应。type类型唯一。 -->
<result name="down" type="stream">
<!-- 文件的类型,指定为任意二进制类型,可以标识任何文件 -->
<param name="contentType">application/octet-stream</param>
<!-- 对应的是Action类中返回流的属性!对应getFileStream()方法 -->
<param name="inputName">fileStream</param>
<!-- 指定浏览器显示的文件名,对应action类中的返回文件名的属性!需要url编码,对应getDownFile()方法 -->
<param name="contentDisposition">attachment;filename=${downFile}</param>
<!-- 读取缓冲区大小 -->
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts>
 package com.rong.web.action;

 import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import com.opensymphony.xwork2.ActionSupport; public class MyAction extends ActionSupport {
private static final long serialVersionUID = -351587239525292420L;
private String filePath;
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
@Override
public String execute() throws Exception {
//实际开发中,用户只要传文件路径即可实现下载,这里固定路径。
filePath="C:/2017.11.17-广州市部份培训公司名单.docx";
return "down";
}
//返回流<param name="inputName">fileStream</param>
public InputStream getFileStream() throws FileNotFoundException{
return new FileInputStream(filePath);
}
//<param name="contentDisposition">attachment;filename=${downFile}</param>
public String getDownFile() throws UnsupportedEncodingException{
File file=new File(filePath);
String name = file.getName();
return URLEncoder.encode(name, "UTF-8");
}
}

Struts2(五)的更多相关文章

  1. Struts2(五):ActionSupport

    我们在上一章节中的一个列子中使用到了一个标识跳转到登录页面的例子: 示例是这样写的: index.jsp: <br/> <a href="gotoLoginPage&quo ...

  2. Struts2(五)——核心拦截器

    Struts框架一共为我们提供了35个拦截器,其中默认的拦截器有18个,框架访问action的异常处理,配置信息处理,转发重定向选择,上传等等等等,都是这18个拦截器中设置的,起着非比寻常的作用.而这 ...

  3. Struts2五、Struts1与Struts2的区别

    Struts1和Struts2的区别和对比: Action 类:  • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...

  4. Struts2(五)常量的配置

    Struts2 常量大多在 默认的配置文件中已经配置好,但根据用户的需求不同,开发的要求不同,需要修改这些常量值,修改的方法就是在配置的文件对常量进行重新配置 在struts.xml 文件中使用< ...

  5. struts2(五) s标签和国际化

    坚持就是胜利. --WH 一.s标签 在struts-2.3.15.1/docs/WW/docs/tag-reference.html下,就有着struts2所有标签的参考文献,只能看看其中比较常用的 ...

  6. Struts2(五)数据校验

    一.概述 在提交表单数据时,如果数据需要保存到数据库,空输入等可能会引发一些异常,为了避免引起用户的输入引起底层异常,通常在进行业务逻辑操作之前,先执行基本的数据校验. 下面通过两种方式来阐述Stru ...

  7. Struts2(五)Action二配置

    一.method参数 action package com.pb.web.action; public class HourseAction { public String add(){ System ...

  8. Struts2(五.用户注册的实现及整合Action的配置方法)

    一.用户注册功能 register.jsp页面 若是jquery ajax方式提交给action,还要回到jquery,控制权在jquery若是表单方式提交给action,控制权交给action &l ...

  9. 【Struts2五】ValueStack以及ognl表达式二(经常使用标签)

    Ognl经常使用标签:   1.s:debug       假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态    2.s:property       1.输出       ...

  10. 【Java EE 学习 53】【Spring学习第五天】【Spring整合Hibernate】【Spring整合Hibernate、Struts2】【问题:整合hibernate之后事务不能回滚】

    一.Spring整合Hibernate 1.如果一个DAO 类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了:如果一个DAO类没有 ...

随机推荐

  1. arm平台的调用栈回溯(backtrace)

    title: arm平台的调用栈回溯(backtrace) date: 2018-09-19 16:07:47 tags: --- 介绍 arm平台的调用栈与x86平台的调用栈大致相同,稍微有些区别, ...

  2. Zeta--S3 Linux使用PCCAM/WEBCAM模式

    #include <ZetaCameraInterface.h> #include <ZetaMediaPlayInterface.h> using namespace zet ...

  3. ubuntu18.04 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)解决方法

    出现问题: 最近打开系统之后没声儿,抽空解决以下,谁知道安装的时候出现了这个问题,一看就是锁被占了呗 直接重启大法.....不行,看来是锁分配出问题了,找了个解锁命令 jiang@ryzen:~$ s ...

  4. 第六节 Go数据结构之集合

    一.什么是集合 集合就是不同对象的无序聚集.那么链表和集合有什么关系呢?我们来变个魔术.如下图是各种颜色组成的链表: 下面我们一步步把链表变成集合. 第一步砍去链接 第二步去掉重复 第三步放到一个框里 ...

  5. nodejs搭建web服务器初级

    nodejs搭建简单的web服务器 1.1简介 Node.js是基于Chrome JavaScript运行时建立的一个平台,实际上它是对Google Chrome V8引擎进行了封装,它主要用于创建快 ...

  6. 20155204 2016-2017-2 《Java程序设计》第10周学习总结

    20155204 2016-2017-2 <Java程序设计>第10周学习总结 教材学习内容总结 1.计算机网络概述 路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控 ...

  7. 20145226夏艺华 《Java程序设计》第9周学习总结

    教材学习内容总结 学习目标 了解JDBC架构 掌握JDBC架构 掌握反射与ClassLoader 了解自定义泛型和自定义枚举 会使用标准注解 第16章 整合数据库 16.1 JDBC入门 (一)JDB ...

  8. 【LOJ4632】[PKUSC2018]真实排名

    [LOJ4632][PKUSC2018]真实排名 题面 终于有题面啦!!! 题目描述 小 C 是某知名比赛的组织者,该比赛一共有 \(n\) 名选手参加,每个选手的成绩是一个非负整数,定义一个选手的排 ...

  9. C#:在AnyCPU模式下使用CefSharp

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客讲述如何在AnyCPU模式下使用CefSharp 因为在某些情况下,不得不用AnyCPU,但是CefS ...

  10. centOS上安装最新git 2.4.0

    git 地址: https://www.kernel.org/pub/software/scm/git/ 1.  先安装一堆依赖 yum install curl curl-devel zlib-de ...