在线编程在线课堂在线测评Anycodes在线编程

编程论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

How to use bs4??
本帖最后由 carry0987 于
Double Queue 问题描述 : The new founded Balkan Investment Group Bank (
John 问题描述 : Little John is playing very funny game
linux-command Linux命令大全搜索工具,内容包含Linux命令
Coati 是一款跨平台的代码查看工具,适用于 C/C++ 和 Java。商业软件。特性:1. 索引
系统可承载海量并发,消息收发确认机制 保障消息必达 系统采用动态智
全平台视频监控,支持安卓苹果以及pcweb,支持海康大华等主流dvr,全部源码以及文档 单聊、群聊、商
如何访问类的私有属性? 下面以 TPathData 为例,
问题:从 XE4 以来,Firemonkey 曲线绘图在移动平台不平滑的问题一直令人诟病,提交到官方的 QC 也是族繁不及备载,官方似乎有意的
操作数据库(RODBC)   odbcConnect(dsn, uid="", p
数据模式:mode函数显示任何对象的模式。常见的单个的
系统可承载海量并发,消息收发确认机制 保障消息必达 系统采用动态智
RabbitMQ与PHP(一) 项
Iease团队扩编预备中,盼望能有Ruby或者java工程师加盟。全职兼职都可以。有爱好的伴侣请与我接洽。 邮件:i
ruby 怎么设置装备摆设GTK2,求教指导下!
#include #include #include #include using namespace std; int main() {
标题如图所示: 有n盏灯,编号1~n。一开端灯都是关着的
成熟的消息收发确认机制,支持万人大群 支持开发自定义的消息sdk接口,扩展性超强 支持单/
成熟的消息收发确认机制,支持万人大群 支持开发自定义的消息sdk接口,扩展性超强 支持单/
1. 注意列表和集合的区别 set 列表表现形式: list_1
Ajax   Ajax即“Asynchronous Javascript And
大师好,我比来在做布谷鸟优
分辨提取A和B图像Harris角点,接下来须要对

[精彩分享] Struts2入门(七)——Struts2的文件上传和下载

[复制链接]
发表于 2016-11-19 20:03:24 | 显示全部楼层 |阅读模式
一、前言

在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载。
注意:文件上传时,我们需要将表单提交方式设置为"POST"方式,并且将enctype属性设置为"multipart/form-data",该属性的默认值为"application/x-www-form-urlencoded",就是说,表单要写成以下这种形式:
  1. <form action="" method="post" enctype="multipart/form-data"></form>
复制代码
而且Struts2中并没有提供自己的文件上传解析器,默认使用的是Jakarta的Common-FileUpload的文件上传组件,所以我们还需要在添加两个包:
commons-io
commons-fileupload
至于版本根据自己需要选择(笔者在第一篇已经搭建好环境了。地址)
注意点如下:
1.1、文件上传的前提是表单属性method="post" enctype="multipart/form-data";
1.2、web应用中必须包含common-fileupload.jar和common-io.jar,因为struts2默认上传解析器使用的是jakarta;
1.3、可以在struts.xml中配置最大允许上传的文件大小:<constant name="struts.multipart.maxSize" value="....."/>,默认为2M;
二、文件上传案例

2.1、在Action中定义属性:
private File upload;                //包含文件内容
private String uploadFileName;       //上传文件的名称;
private String uploadContentType;    //上传文件的MIME类型;
这些属性都会随着文件的上传自动赋值;
2.2、上传图片的例子
新建视图界面:Upload.jsp
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Struts2 FileUpload</title>
  8. </head>
  9. <body>
  10.     <form action="fileupload" method="post" enctype="multipart/form-data">
  11.         文件标题:<input type="text" name="title"/><br/>
  12.         选择文件:<input type="file" name="upload"/><br/>
  13.         <input type="submit" value="上传"/>
  14.     </form>
  15. </body>
  16. </html>
复制代码
新建UploadAction继承ActionSupport
  1. package com.Struts2.load;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import org.apache.struts2.ServletActionContext;
  7. import com.opensymphony.xwork2.ActionSupport;
  8. //上传单个文件
  9. public class UploadAction extends ActionSupport {
  10.     //文件标题请求参数的属性
  11.     private String title;
  12.     //上传文件域的属性
  13.     private File upload;
  14.     //上传文件类型
  15.     private String uploadContentType;
  16.     //上传文件名
  17.     private String uploadFileName;
  18.     //接受依赖注入的属性
  19.     private String savePath;
  20.    
  21.     public String getTitle() {
  22.         return title;
  23.     }
  24.     public void setTitle(String title) {
  25.         this.title = title;
  26.     }
  27.     public File getUpload() {
  28.         return upload;
  29.     }
  30.     public void setUpload(File upload) {
  31.         this.upload = upload;
  32.     }
  33.     public String getUploadContentType() {
  34.         return uploadContentType;
  35.     }
  36.     public void setUploadContentType(String uploadContentType) {
  37.         this.uploadContentType = uploadContentType;
  38.     }
  39.     public String getUploadFileName() {
  40.         return uploadFileName;
  41.     }
  42.     public void setUploadFileName(String uploadFileName) {
  43.         this.uploadFileName = uploadFileName;
  44.     }
  45.     //返回上传文件的保存位置
  46.     public String getSavePath() {
  47.         return ServletActionContext.getRequest().getRealPath(savePath);
  48.     }
  49.     //接受依赖注入的方法
  50.     public void setSavePath(String savePath) {
  51.         this.savePath = savePath;
  52.     }
  53.     public String execute() throws Exception{
  54.         System.out.println(getSavePath());
  55.         System.out.println(getUploadFileName());
  56.         //以服务器的文件保存地址和原文件名建立上传文件输出流
  57.         FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+getUploadFileName());
  58.         
  59.         //以上传文件建立一个文件上传流
  60.         FileInputStream fis = new FileInputStream(getUpload());
  61.         
  62.         //将上传文件的内容写入服务器
  63.         byte[] buffer = new byte[1024];
  64.         int leng = 0;
  65.         while((leng=fis.read(buffer))>0){
  66.             fos.write(buffer,0,leng);
  67.             buffer = new byte[1024];
  68.         }
  69.         return SUCCESS;
  70.     }
  71. }
复制代码
struts.xml配置文件中部署
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
  1.     <!--文件上传  -->
  2.     <package name="default" extends="struts-default">
  3.         <action name="fileupload" class="com.Struts2.load.UploadAction">
  4.             <!--使用拦截器过滤:1、配置默认拦截器,2、配置input的逻辑视图-->
  5.             <interceptor-ref name="fileUpload">
  6.                 <param name="allowedTypes">image/jpeg,image/jpg,/image/gif,image/png</param>
  7.             </interceptor-ref>
  8.             <!-- 必须显示配置defaultStack拦截器的引用 -->
  9.             <interceptor-ref name="defaultStack"/>
  10.             <param name="savePath">/upload</param>
  11.             <result name="success">succ.jsp</result>
  12.             <!--必须配置input的逻辑视图  -->
  13.             <result name="input">Error.jsp</result>
  14.         </action>
  15. <struts>
复制代码
注意:web.xml中需要配置struts2的拦截器

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  3.   <display-name>LearStruts2</display-name>
  4.   <welcome-file-list>
  5.     <welcome-file>index.html</welcome-file>
  6.     <welcome-file>index.htm</welcome-file>
  7.     <welcome-file>index.jsp</welcome-file>
  8.     <welcome-file>default.html</welcome-file>
  9.     <welcome-file>default.htm</welcome-file>
  10.     <welcome-file>default.jsp</welcome-file>
  11.   </welcome-file-list>
  12.   
  13.   <!--为Struts2定义一个过滤器  -->
  14.    <filter>
  15.       <filter-name>struts2</filter-name>
  16.       <filter-class>
  17.           org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
  18.       </filter-class>
  19.   </filter>
  20.   <filter-mapping>
  21.       <filter-name>struts2</filter-name>
  22.       <url-pattern>/*</url-pattern>
  23.   </filter-mapping>
  24. </web-app>
复制代码
web.xml
succ.jsp视图代码
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <%@ taglib uri="/struts-tags" prefix="s"%>   
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>上传成功</title>
  9. </head>
  10. <body>
  11.     上传成功<br/>
  12.     文件标题:<s:property value="title"/><br/>
  13.     <s:property value="uploadFileName"/>
  14.     文件为:<img src="<s:property value="'/LearStruts2/upload/'+uploadFileName"/>"/><br/>
  15. </body>
  16. </html>
复制代码
Error.jsp视图代码

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <%@ taglib prefix="s" uri="/struts-tags" %>
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5. <html>
  6. <head>
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>Error 界面</title>
  9. </head>
  10. <body>
  11.     <s:fielderror/>
  12. </body>
  13. </html>
复制代码
Error.jsp
代码效果如下:

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

注意:在struts.xml配置文件中,已经限制只能上传图片格式,如果上传别的文件的话,则会报错。

2.3、多个文件上传
新建Upliads.jsp

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>上传多个文件</title>
  8. </head>
  9. <body>
  10.     <form action="filesupload" method="post" enctype="multipart/form-data">
  11.         文件标题:<input type="text" name="title"><br/>
  12.         选择第一个文件:<input type="file" name="uploads"><br/>
  13.         选择第二个文件:<input type="file" name="uploads"><br/>
  14.         选择第三个文件:<input type="file" name="uploads"><br/>
  15.         <input type="submit" value="上传"/>
  16.     </form>
  17. </body>
  18. </html>
复制代码
Upliads.jsp
新建UploadsAction类继承ActionSupport
  1. package com.Struts2.load;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import org.apache.struts2.ServletActionContext;
  7. import com.opensymphony.xwork2.ActionSupport;
  8. //上传多个文件
  9. public class UploadsAction extends ActionSupport {
  10.     private String title;    //对应jsp的title
  11.     private File[] uploads;    //对应jsp的uploads
  12.     private String[] uploadsContentType;
  13.     private String[] uploadsFileName;
  14.     //savePath:通过配置文件进行赋值"'\'upload",
  15.     //其中的'\'表示项目的根目录D:\\tomcat-8.0\\wtpwebapps\\LearStruts2\\upload
  16.     private String savePath;
  17.     public String getTitle() {
  18.         return title;
  19.     }
  20.     public void setTitle(String title) {
  21.         this.title = title;
  22.     }
  23.     public File[] getUploads() {
  24.         return uploads;
  25.     }
  26.     public void setUploads(File[] upload) {
  27.         this.uploads = upload;
  28.     }
  29.     public String[] getUploadsContentType() {
  30.         return uploadsContentType;
  31.     }
  32.     public void setUploadsContentType(String[] uploadsContentType) {
  33.         this.uploadsContentType = uploadsContentType;
  34.     }
  35.     public String[] getUploadsFileName() {
  36.         return uploadsFileName;
  37.     }
  38.     public void setUploadsFileName(String[] uploadsFileName) {
  39.         this.uploadsFileName = uploadsFileName;
  40.     }
  41.     public String getSavePath() {
  42.         return ServletActionContext.getRequest().getRealPath(savePath);
  43.     }
  44.     public void setSavePath(String savePath) {
  45.         this.savePath = savePath;
  46.     }
  47.     public String execute() throws Exception{
  48.         File[] files = getUploads();
  49.         for(int i = 0;i<files.length;i++){
  50.             System.out.println(getSavePath());
  51.             System.out.println(getUploadsFileName()[i]);
  52.             //getSavePath : 获得根目录
  53.             //getUploadsFileName() : 获得文件名
  54.             FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+getUploadsFileName()[i]);
  55.             
  56.             FileInputStream fis = new FileInputStream(files[i]);
  57.             
  58.             byte[] buffer = new byte[1024];
  59.             
  60.             int len = 0;
  61.             
  62.             while((len=fis.read(buffer))>0){
  63.                 fos.write(buffer,0,len);
  64.                 buffer = new byte[1024];
  65.             }
  66.         }
  67.         return SUCCESS;
  68.     }
  69. }
复制代码
struts.xml中配置信息
  1.         <!--多个文件上传  -->
  2.         <action name="filesupload" class="com.Struts2.load.UploadsAction">
  3.             <!--该属性是依赖注入:通过配置文件给savePath赋值 ,是必须的 -->
  4.             <param name="savePath">/upload</param>
  5.             <result name="success">succ1.jsp</result>
  6.         </action>
  7.         
复制代码
succ1.jsp

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Struts2 FileUpload</title>
  8. </head>
  9. <body>
  10.     <form action="fileupload" method="post" enctype="multipart/form-data">
  11.         文件标题:<input type="text" name="title"/><br/>
  12.         选择文件:<input type="file" name="upload"/><br/>
  13.         <input type="submit" value="上传"/>
  14.     </form>
  15. </body>
  16. </html>0
复制代码
succ1.jsp
代码效果如下:

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

2.3、Struts2的文件下载
视图下载界面

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载

Struts2入门(七)——Struts2的文件上传和下载
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Struts2 FileUpload</title>
  8. </head>
  9. <body>
  10.     <form action="fileupload" method="post" enctype="multipart/form-data">
  11.         文件标题:<input type="text" name="title"/><br/>
  12.         选择文件:<input type="file" name="upload"/><br/>
  13.         <input type="submit" value="上传"/>
  14.     </form>
  15. </body>
  16. </html>1
复制代码
fuledown.jsp
Action类
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Struts2 FileUpload</title>
  8. </head>
  9. <body>
  10.     <form action="fileupload" method="post" enctype="multipart/form-data">
  11.         文件标题:<input type="text" name="title"/><br/>
  12.         选择文件:<input type="file" name="upload"/><br/>
  13.         <input type="submit" value="上传"/>
  14.     </form>
  15. </body>
  16. </html>2
复制代码
Struts.xml配置文件
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2.     pageEncoding="UTF-8"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7. <title>Struts2 FileUpload</title>
  8. </head>
  9. <body>
  10.     <form action="fileupload" method="post" enctype="multipart/form-data">
  11.         文件标题:<input type="text" name="title"/><br/>
  12.         选择文件:<input type="file" name="upload"/><br/>
  13.         <input type="submit" value="上传"/>
  14.     </form>
  15. </body>
  16. </html>3
复制代码
代码都有笔者测试过,至于解析,笔者会在后期理解好之后再重新写。



上一篇:activemq和jms是种什么关系
下一篇:iText
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复

使用道具 举报

发表于 2017-2-1 07:07:47 | 显示全部楼层
楼主不知亡国恨,一天到晚打飞机。举头望明月,低头打飞机。洛阳亲友如相问,就说楼主打飞机。少壮不努力,楼主打飞机。垂死病中惊坐起,楼主还要打飞机。生当作人杰,死亦打飞机。人生自古谁无死,楼主继续打飞机。*众里寻他千百回,蓦然回首,楼主正在打飞机。
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-6-9 13:01:24 | 显示全部楼层
水。。。。。。。
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-6-14 10:42:15 | 显示全部楼层
楼主啊
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-8-21 05:06:51 | 显示全部楼层
LZ别这么高深莫测啊
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-9-2 10:51:54 | 显示全部楼层
呵呵
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-10-11 16:27:51 | 显示全部楼层
一二一
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-10-14 01:10:23 | 显示全部楼层
看的不是很懂
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-11-2 08:16:39 | 显示全部楼层
这个论坛还活着
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发表于 2017-11-6 15:20:59 | 显示全部楼层
约不约
在线编程(http://www.anycodes.cn)&编程论坛(http://www.52exe.cn)感谢您的支持!
回复 支持 反对

使用道具 举报

发布主题 上个主题 下个主题 快速回复 返回列表 官方QQ群
在线客服
客 服 中 心
群 机 器 人
网站二维码
收 起 客 服

QQ|Archiver|手机版|小黑屋|Anycodes ( ICP14002806Anycodes在线编程

GMT+8, 2018-11-22 01:07 , Processed in 1.854475 second(s), 99 queries .

Powered by Anycodes

© 2001-2013 吉林市群龙科技有限公司 Inc.

快速回复 返回顶部 返回列表