今天记录一下利用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. python和sudo python 出现no module named XXX

    今天使用python执行文件,然而显示权限不够, 但是加上sudo之后,又会显示no module named XXX 问题在于两者python路径中包含的库不同.解决方法: 分别进入两个python ...

  2. 如何在 Linux 上安装 Nginx (源码安装)

    如何在 Linux( CentOS ) 上安装 Nginx 1.下载 nginx 链接 : https://pan.baidu.com/s/1sll0Hrf 密码 : xnem 2.安装 gcc ( ...

  3. Springboot2本地锁实践

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交…. 下面我们利用 ...

  4. SQL SERVER-约束

    NOT NULL - 指示某列不能存储 NULL 值. UNIQUE - 保证某列的每行必须有唯一的值. PRIMARY KEY - NOT NULL 和 UNIQUE 的结合.确保某列(或两个列多个 ...

  5. l洛谷 P2326 AKN’s PPAP

    P2326 AKN’s PPAP 题目描述 “I have a pen,I have an apple.Eh,Apple-Pen!. I have a pen,I have pineapple.En, ...

  6. POJ 1306

    其实求的这个数的式子化简一下,就是C(N,M)..... #include <iostream> #include <algorithm> #include <cstdi ...

  7. Linux多线程实践(四 )线程的特定数据

    在单线程程序中.我们常常要用到"全局变量"以实现多个函数间共享数据, 然而在多线程环境下.因为数据空间是共享的.因此全局变量也为全部线程所共同拥有.但有时应用程序设计中有必要提供线 ...

  8. Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI

    准备工作:Eclipse ADT IDE 开发工具,NDK .Java 环境,博主的配置是:Windows x86 , ADT Build: v22.3.0-887826 , JAVA 1.7, ND ...

  9. javaWeb web.xml 配置

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...

  10. oracle 10g/11g 命令对照,日志文件夹对照

     oracle 10g/11g  命令对照,日志文件夹对照 oracle 11g 中不再建议使用的命令 Deprecated Command Replacement Commands crs_st ...