Struts2(五)
以下内容是基于导入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(五)的更多相关文章
- Struts2(五):ActionSupport
我们在上一章节中的一个列子中使用到了一个标识跳转到登录页面的例子: 示例是这样写的: index.jsp: <br/> <a href="gotoLoginPage&quo ...
- Struts2(五)——核心拦截器
Struts框架一共为我们提供了35个拦截器,其中默认的拦截器有18个,框架访问action的异常处理,配置信息处理,转发重定向选择,上传等等等等,都是这18个拦截器中设置的,起着非比寻常的作用.而这 ...
- Struts2五、Struts1与Struts2的区别
Struts1和Struts2的区别和对比: Action 类: • Struts1要求Action类继承一个抽象基类.Struts1的一个普遍问题是使用抽象类编程而不是接口,而struts2的Ac ...
- Struts2(五)常量的配置
Struts2 常量大多在 默认的配置文件中已经配置好,但根据用户的需求不同,开发的要求不同,需要修改这些常量值,修改的方法就是在配置的文件对常量进行重新配置 在struts.xml 文件中使用< ...
- struts2(五) s标签和国际化
坚持就是胜利. --WH 一.s标签 在struts-2.3.15.1/docs/WW/docs/tag-reference.html下,就有着struts2所有标签的参考文献,只能看看其中比较常用的 ...
- Struts2(五)数据校验
一.概述 在提交表单数据时,如果数据需要保存到数据库,空输入等可能会引发一些异常,为了避免引起用户的输入引起底层异常,通常在进行业务逻辑操作之前,先执行基本的数据校验. 下面通过两种方式来阐述Stru ...
- Struts2(五)Action二配置
一.method参数 action package com.pb.web.action; public class HourseAction { public String add(){ System ...
- Struts2(五.用户注册的实现及整合Action的配置方法)
一.用户注册功能 register.jsp页面 若是jquery ajax方式提交给action,还要回到jquery,控制权在jquery若是表单方式提交给action,控制权交给action &l ...
- 【Struts2五】ValueStack以及ognl表达式二(经常使用标签)
Ognl经常使用标签: 1.s:debug 假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态 2.s:property 1.输出 ...
- 【Java EE 学习 53】【Spring学习第五天】【Spring整合Hibernate】【Spring整合Hibernate、Struts2】【问题:整合hibernate之后事务不能回滚】
一.Spring整合Hibernate 1.如果一个DAO 类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了:如果一个DAO类没有 ...
随机推荐
- python自动化学习
1.环境搭建 1.1 下载或拷贝整个PyAuthoTest到指定的目录,如D:\PyAuthoTest 1.2 安装Python2.7以及需要使用到的安装包列表如下 requests-2.10.0.t ...
- scala (2) while 和变量
(1)在scala中声明变量有两个关键字,val和var val: 是不可变的,即声明了变量不能再进行更改,类似于java中的final var: 是可变的,即可以重新对其赋值 声明变量的通用格式: ...
- 开篇~试试word写博客
word发布博客设置,mark一下 原帖地址:http://www.cnblogs.com/liuxianan/archive/2013/04/13/3018732.html word代码高亮插件:h ...
- 【原创】user.id字段
odoo中User.ID 字段是用户登录表 res_users 中的字段,所以要关联某个用户或是判断某个用户,可以利用该字段. 例如:在某个 界面中的domain中,要求显示的是关联某用户的单子,则如 ...
- 【洛谷P2252】取石子游戏
题面 题解 威佐夫博弈 代码 #include<cstdio> #include<algorithm> #include<cmath> #define RG reg ...
- 4825: [Hnoi2017]单旋
4825: [Hnoi2017]单旋 链接 分析: 以后采取更保险的方式写代码!!!81行本来以为不特判也可以,然后就总是比答案大1,甚至出现负数,调啊调啊调啊调~~~ 只会旋转最大值和最小值,以最小 ...
- ELKStack入门篇(一)之ELK部署和使用
一.ELKStack简介 1.ELK介绍 中文指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details ELK Stack包 ...
- 电信NB-IOT的温湿度采集器开发记录
1. 首先打开浏览器,登录电信商用服务器,上传profile文件 2. 上传编解码插件在,注意的是,上传编解码插件是电信测试用服务器平台(不同的网址),反正不明白电信搞啥幺蛾子,得两个地方去上传 3. ...
- idea开启jquery提示及如何找到学习目标
idea开启jquery提示 根据这些library就知道该学习哪些技术了
- .Net FrameWork常用类
System类 System.Environment类: 提供有关当前环境和平台的信息以及操作它们的方法. System.Console类 :表示控制台应用程序的标准输入流.输出流和错误流. ...