`
titanseason
  • 浏览: 181837 次
社区版块
存档分类
最新评论

JAVA Web 之 struts2文件上传下载演示(一)

阅读更多

JAVA Web 之 struts2文件上传下载演示(一)

 

 

一、文件上传演示

 

1.需要的jar包

    大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/lib目录下面即可,需要的jar包如下图所示,其中的javax.servlet.jar是额外添加的,我到网上随便搜了一个下载地址http://ishare.iask.sina.com.cn/f/19185878.html?retcode=0,当然附件里面也有


 

2.配置web.xml

    配置WebContent/WEB-INF/web.xml中的内容,如果你的项目已经配置好了struts,这步可以跳过.

<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>UpDownDemo</display-name>
  
  <!-- 配置struts2 -->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <!-- 所有类型的请求都会被struts拦截 -->
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

 

3.Web界面

    其中有一点是特别需要注意的:定义form的时候,一定要添加enctype="multipart/form-data",并且一定要设置method="post"。

示例<form action="upload" enctype="multipart/form-data" method="post">

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传演示</title>
</head>
<body>
	<div align="center">
		<form action="upload" enctype="multipart/form-data" method="post">
			请选择文件<br>
			<input type="file" name="file">
			<br><br>
			<input type="submit" value="确认上传">
		</form>
	</div>
</body>
</html>

 

 

4.后台JAVA代码

    代码中有解析

package action;

import java.io.File;
import java.io.IOException;
import java.io.Serializable;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import util.Encrypter;

import com.opensymphony.xwork2.ActionSupport;

/**
 * @author Kingt.W
 */
@SuppressWarnings("serial")
public class FileAction extends ActionSupport implements Serializable {
	/*
	 * 这里定义的变量,一定要跟网页的<input type="file" name="file">中的name属性的值一致.
	 * 如果网页中定义的是<input type="file" name="img">,那么在这里就要定义File img;
	 */
	private File file;
	/*
	 * 这里定义的fileFileName一定要是xxxFileName的形式,否则无法取到文件的文件名.
	 * 其中xxx必须与上面定义的File类型的变量一致,如果上面定义的是File img,那么这里就
	 * 定义为String imgFileName
	 */
	private String fileFileName;
	/*
	 * 这里定义的是文件的类型,如果不需要获取文件类型的话,可以不定义.
	 *  命名规则跟xxxFileName类似,这里一定要定义成xxxContentType形式.
	 */
	private String fileContentType;
	/*
	 * 这这个变量是重命名后的文件名
	 */
	private String newFileName;
	
	//getters and setters我省略了,没有复制上来

	public String upload() {
		System.out.println("文件名:" + fileFileName);
		System.out.println("文件类型:" + fileContentType);
		
		if (file != null) {
			//文件的保存路径是WebContent/file目录下
			String realpath = ServletActionContext.getServletContext()
					.getRealPath("/file");
			System.out.println("文件的保存路径:" + realpath);
			
			//文件的后缀
			String suffix = fileFileName.substring(fileFileName
					.lastIndexOf("."));
			if (fileFileName.lastIndexOf(".") == -1) {
				return INPUT;
			}
			
			//上传以后,会重命名文件的名称,将其命名为全部是数字的文件名,防止可能出现的乱码.
			//当然, 只是为了防止出现乱码,一般不会出现乱码
			newFileName = Encrypter.randFileName() + suffix; 
			
			File savefile = new File(new File(realpath), newFileName);
			//如果保存的路径不存在,则新建
			if (!savefile.getParentFile().exists())
				savefile.getParentFile().mkdirs();

			try {
				//复制文件
				FileUtils.copyFile(file, savefile);
				System.out.println("文件上传成功");
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("文件上传失败");
				return INPUT;
			}
		}
		
		return SUCCESS;
	}
}
 

 

5.配置struts.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="struts" namespace="/" extends="struts-default">
		<action name="upload" class="action.FileAction" method="upload">
			<result name="success">download.jsp</result>
			<result name="input">download.jsp</result>
		</action>
	</package>
</struts>
 

 

6.小注

    至此,文件上传的功能就实现了。

 

    <1>文件下载演示,请查看另一篇博客

 http://titanseason.iteye.com/blog/1489473

 

    <2>由于我是在J2EE Eclipse下建的项目,所以如果大家把附件下载以后,导入J2EE Eclipse是可以直接运行的,导入其他的IDE应该是没法直接运行,但是可以先新建好项目以后,把我的项目中的文件放到对应的目录下面即可

 

    <3>效果图如下

    选择文件,然后点击【确认上传】


 

    上传文件的内容如下图所示


 

然后就可以在 eclipse工作空间\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\UpDownDemo\file下面找到刚刚上传的文件了。

打开文件,发现两个记事本中的内容一样(在java代码中我有解释为啥会把文件重命名)


  • 大小: 5.4 KB
  • 大小: 3.2 KB
  • 大小: 9.5 KB
  • 大小: 11.2 KB
分享到:
评论
2 楼 未闻花铭 2015-02-09  
Encrypter这个是?我的报错
1 楼 runsky3 2013-07-24  
感谢楼主分享,代码运行正常。

相关推荐

    JAVA Web 之 struts2文件上传下载演示(二)

    在JAVA Web开发中,Struts2框架提供了强大的文件上传和下载功能。本示例将深入讲解如何使用Struts2实现这一功能,以便开发者能够更好地理解并应用到实际项目中。 一、Struts2文件上传原理 Struts2的文件上传功能...

    能运行的ExtJs+Struts2文件上传

    标题"能运行的ExtJs+Struts2文件上传"表明这是一个实现了文件上传功能的示例项目。在ExtJs中,可以利用其提供的FileInput组件创建一个文件选择器,用户可以选择文件并提交到服务器。Struts2则在服务器端处理文件上传...

    struts2文件下载(解决了中文乱码问题)

    Struts2是一个非常流行的Java Web框架,用于构建MVC(模型-视图-控制器)架构的应用程序。在处理文件下载时,Struts2提供了一套完整的解决方案,包括处理中文文件名的乱码问题。在标题提到的场景中,开发者可能遇到...

    Struts2演示源码

    Struts2是一个强大的Java web开发框架,用于构建可维护、可扩展且结构良好的应用程序。它提供了MVC(Model-View-Controller)设计模式的实现,极大地简化了开发过程。在这个"Struts2演示源码"中,我们可以深入理解...

    Struts2+Jquery+Ajax

    Struts2是一个强大的Java web应用程序开发框架,它基于Model-View-Controller(MVC)设计模式,用于构建可维护性高、结构清晰的企业级应用。Struts2提供了丰富的功能,如拦截器、结果类型、国际化支持等,使得开发者...

    Struts2综合演示实例

    Struts2是一个强大的Java web应用程序框架,用于构建和管理MVC(模型-视图-控制器)架构的应用程序。在这个综合演示实例中,我们将深入探讨如何使用Struts2框架,结合SQL、JDBC、Java、JSP、JavaScript以及Struts2...

    Struts2+上传文件源码

    这个"Struts2+上传文件源码"是一个演示如何在Struts2框架下实现文件上传的示例代码。 首先,我们来理解上传文件的基本流程。在Struts2中,文件上传是通过`Commons FileUpload`库来处理的,这是一个Apache提供的开源...

    Struts-文件上传下载.rar

    总的来说,"Struts-文件上传下载.rar"这个压缩包可能包含了一个完整的示例,演示了如何在Struts框架下实现文件上传和下载的功能。通过学习和分析其中的代码,开发者可以更好地理解Struts框架处理文件操作的机制,...

    struts2 文件上传和下载示例程序

    这个“Struts2 文件上传和下载示例程序”是一个演示如何在Struts2中实现这两个功能的实例。 文件上传是Web应用程序中的一项重要功能,允许用户从本地计算机选择文件并将其传输到服务器。在Struts2中,这一过程涉及...

    Struts2文件上传

    这个"Struts2文件上传"示例程序旨在演示如何在Struts2框架中实现这一功能。 首先,我们需要理解Struts2的配置文件`struts.xml`在文件上传中的作用。在这个配置文件中,你需要定义一个Action,该Action将处理文件...

    struts1.2文件上传demo

    Struts1.2 文件上传是Java Web开发中的一个重要实践,尤其在处理用户通过网页提交大体积数据时,如图片、文档等。这个"struts1.2文件上传demo"是一个基于MyEclipse6.0集成开发环境的示例项目,用于演示如何在Struts...

    struts2(ssh)带进度条文件上传 demo 的jar包1

    这个"struts2(ssh)带进度条文件上传 demo 的jar包1"可能是为了演示如何实现这一功能,但由于描述中提到权限问题,jar包被分成了三次上传,这里是第一部分。 在实现带进度条的文件上传时,通常需要以下步骤: 1. ...

    Struts2多文件上传

    Struts2是一个流行的Java Web框架,它为开发者提供了一种优雅的方式来构建可维护、结构清晰的Web应用程序。在Struts2中实现多文件上传功能是一项常见的需求,这使得用户可以在一次请求中上传多个文件。本篇文章将...

    Struts2 三种下载方法 源码(有图有真相)

    在Struts2中处理文件下载是常见的需求,尤其是在处理用户请求获取服务器上的静态资源或者上传文件的下载时。本资源包提供的源码详细演示了三种不同的文件下载方法。 1. **超链接下载** 超链接下载是最直观且简单的...

    【动力节点】王勇老师Java视频教程_Java框架视频之Struts2

    Struts2是Java EE领域中广泛使用的MVC框架之一,它的出现极大地简化了Web应用的开发过程。王勇老师的教程从Struts1与Struts2的比较入手,通过对比分析,让学员能够清晰地看到Struts2的进步和优势。他以首个实例为...

    java struts国际化 struts 源码 演示

    Struts是Java Web开发中的一款经典MVC框架,它的出现极大地简化了企业级应用的构建。国际化(Internationalization,简称i18n)是软件设计中一个重要的方面,它允许软件适应不同语言和文化环境。在Java Struts框架中...

    Java struts2 Spring 整合文档附加演示工程

    1.struts2_1 struts2 基本配置 2.struts2_2 validationl,ModelDriven,properties 3.struts2_interceptor 拦截器,自定义拦截器 4.struts2_log4j 5.struts2_spring struts spring 整合 以上功能包含完整示例代码 ...

    Struts2 demo2

    Struts2是一个强大的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。这个"Struts2 demo2"很可能是为了演示和学习Struts2框架的多种功能和配置方式。以下是根据提供的文件名解析出的相关知识点:...

    DWZ的demo工程(后台java实现,使用struts2)

    在本示例中,它与Java后端技术Struts2结合,展示了一个完整的CRUD(创建、读取、更新、删除)操作及分页功能的DEMO工程。** **1. DWZ框架:** DWZ提供了丰富的UI组件,如表单、对话框、按钮、菜单等,简化了前端...

    struts2简单例子

    Struts2是一个强大的Java EE应用程序框架,用于构建MVC(模型-视图-控制器)架构的Web应用。这个“struts2简单例子”是初学者理解Struts2工作原理和核心概念的一个很好的起点。让我们深入探讨一下Struts2的基础知识...

Global site tag (gtag.js) - Google Analytics