今天记录一下利用struts2实现上传下载,借此案例说明一下struts2的开发流程。

须要注意的是struts2版本号不同非常多地方的写法是不同的。本例使用struts2.3.15 。有差别的地方文中会提到。下一篇具体说明下不同版本号差别 的地方。


  1. 建立web项目,导入必要jar包。替换web.xml。

    不同版本号标签内容有所不同
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name></display-name>
<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

2.在src根文件夹手动建立struts.xml。加入头文件标签及action配置。

这里我们主要须要两个action:upoad和download。

<?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>
<constant name="struts.devMode" value="true" /> <!-- 开发模式 -->
<package name="up" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<action name="index">
<result>/index.jsp</result>
</action>
<action name="upload" class="com.etoak.action.UploadAction">
<result>
/index.jsp
</result>
</action>
<action name="download" class="com.etoak.action.DownLoadAction">
<!--
注意下载返回的不是一个字符串或跳转action,而是返回 一个流到本地。这里结果集调用stream流
-->
<result type="stream">
<!--
action运行返回流的指定方法,注意此方法有我们自己书 写,不在使用返回String的execute方法处理业务逻辑了。
-->
<param name="inputName">etoak</param>
<!--
文件保存方式
attachmen:使用附件形式
filename=:表示下载之后叫什么名字
${filename}:表示下载后保持原名
-->
<param name="contentDisposition">
attachment;filename=${filename}
</param>
</result>
</action>
</package>
</struts>

3.建立action类。

UploadAction.java

package com.etoak.action;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport {
private File myfile;
private String myfileFileName; public String getMyfileFileName() {
return myfileFileName;
} public void setMyfileFileName(String myfileFileName) {
this.myfileFileName = myfileFileName;
} public File getMyfile() {
return myfile;
} public void setMyfile(File myfile) {
this.myfile = myfile;
} @Override
public String execute() throws Exception {
System.out.println("hhh");
String path = ServletActionContext.getServletContext().getRealPath("image")+"/"
+this.getMyfileFileName();
System.out.println(path);
File desFile = new File(path);
FileUtils.copyFile(this.getMyfile(), desFile);
return this.SUCCESS;
} }

Download.java

package com.etoak.action;

import java.io.FileInputStream;
import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class DownloadAction extends ActionSupport {
private String filename; public String getFilename() {
return filename;
} public void setFilename(String filename) {
this.filename = filename;
}
public InputStream getEtoak() throws Exception{
String path = ServletActionContext.getServletContext().getRealPath("image")
+"/"+this.getFilename();
return new FileInputStream(path); }
}

4.改动index.jsp页面

注意要引入struts标签库

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title></title>
</head>
<body>
<s:form action="upload" enctype="multipart/form-data" method="post" >
<s:file name="myfile" tooltip="" label="上传文件" ></s:file>
<s:submit value="上传"></s:submit>
</s:form>
<hr>
<s:form action="download" enctype="mutipart/form-data">
<s:textfield name="filename" label="请输入文件名称"></s:textfield>
<s:submit value="下载"></s:submit>
</s:form>
</body>
</html>

Struts2学习(三)上传下载的更多相关文章

  1. Struts2实现文件上传下载功能(批量上传)

    今天来发布一个使用Struts2上传下载的项目, struts2为文件上传下载提供了好的实现机制, 首先,可以先看一下我的项目截图 关于需要使用的jar包,需要用到commons-fileupload ...

  2. Javaweb学习笔记——上传下载文件

    一.前言 在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为comm ...

  3. Struts2之文件上传下载

    本篇文章主要介绍如何利用struts2进行文件的上传及下载,同时给出我在编写同时所遇到的一些问题的解决方案. 文件上传 前端页面 <!-- 引入struts标签 --> <%@tag ...

  4. struts2 文件的上传下载 表单的重复提交 自定义拦截器

    文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设 ...

  5. Struts2 文件上传,下载,删除

    本文介绍了: 1.基于表单的文件上传 2.Struts 2 的文件下载 3.Struts2.文件上传 4.使用FileInputStream FileOutputStream文件流来上传 5.使用Fi ...

  6. Struts2 控制文件上传下载

    之前介绍servlet3.0新特性的时候有提到过servlet API提供了一个part类来实现对文件的上传和保存,Struts其实是在其基础上做了进一步的封装,更加简单易用.至于文件下载,Strut ...

  7. Struts2中文件上传下载实例

    1.单文件上传 jsp页面: <!-- 单文件上传 --> <form action="Fileupload.action" method="post& ...

  8. plupload+struts2实现文件上传下载

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8" ...

  9. struts2实现文件上传和下载

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

  10. struts2的文件上传

    在做B/S系统时,通常会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来 ...

随机推荐

  1. a[i++]=a 数组下标自加优先问题

    a[i++]=a 即是: a[i] = a;i ++;先把a赋值给数组a下标为 i 的 元素把 i 自加 1 :即指向下一个元素 =================================== ...

  2. React:关于虚拟DOM(Virtual DOM)

    Virtual DOM 是一个模拟 DOM 树的 JavaScript 对象. React 使用 Virtual DOM 来渲染 UI,当组件状态 state 有更改的时候,React 会自动调用组件 ...

  3. CSS隐藏overflow默认滚动条同时保留滚动效果

    主要应用于移动端场景,仿移动端滚动效果.对于隐藏滚动条,众所周知overflow:hidden,但是想要的滚动效果也没了. 所以对于移动端webkit内核提供一个伪类选择器: .element::-w ...

  4. [using_microsoft_infopath_2010]Chapter2 表单需求,使用表决矩阵

    本章概要 1.从模板创建表单 2.从创建表单收集需求 3.使用全部表单决策 4.决定需要创建哪种表单

  5. AIX查看某个端口被哪个进程占用

    AIX查看某个端口被哪个进程占用 学习了:https://zhidao.baidu.com/question/1928716757722021467.html 1. netstat -Aan|grep ...

  6. HDU2188 悼念512汶川大地震遇难同胞——选拔志愿者

    悼念512汶川大地震遇难同胞--选拔志愿者 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  7. LeetCode OJ 215. Kth Largest Element in an Array 堆排序求解

    题目链接:https://leetcode.com/problems/kth-largest-element-in-an-array/ 215. Kth Largest Element in an A ...

  8. Okio简化处理I/O操作原理

    转载:http://blog.csdn.net/sbsujjbcy/article/details/50523623 Okio库是一个由square公司开发的,它补充了java.io和java.nio ...

  9. MVVM 中 ViewModelBase和 CommandBase

    public class ViewModelBase : INotifyPropertyChanged , IDisposable { public virtual string DisplayNam ...

  10. Linux下DNS服务器搭建详解

    Linux下DNS服务器搭建详解 DNS  即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制.其中通过域名解析 ...