`

webwork/Struts 2 实现页面无刷新多文件上传

阅读更多
这个demo是用webwork实现的,原理上和用Struts 2完全一样。实现多文件上传和页面无刷新效果,用iframe技术实现了页面无刷新功能。上传成功后,后台向前台反馈上传成功的文件信息。

UploadAction.java 实现文件上传功能的action类。
package net.androidla.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.ActionSupport;

public class UploadAction extends ActionSupport {
	private static final long serialVersionUID = 1L;
	private File[] file;
	private String[] filename;
	private String name;
	private String msg;
	
	public String[] getFilename() {
		return filename;
	}

	public void setFilename(String[] filename) {
		this.filename = filename;
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
	}

	public File[] getFile() {
		return file;
	}

	public void setFile(File[] file) {
		this.file = file;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String upload() {
		StringBuilder str = new StringBuilder();
		List<String> filenamearr = new ArrayList<String>();
		for (int n = 0; n < filename.length; n ++) {
			if (!filename[n].equals("")) {
				filenamearr.add(filename[n]);
			}
		}
		
		File path = new File("C:/uploaddir");
		if (!path.exists()) {
			path.mkdirs();
		}
		FileOutputStream fos = null;
		FileInputStream fis = null;
		byte[] b = new byte[1024 * 10];
		int temp = 0;
		String name = null;
		String fname = null;
		int f = 0;
		for (int i = 0; i < file.length; i ++) {
			try {
				fname = filenamearr.get(i);
				f = fname.lastIndexOf("\\");
				name = f != -1 ? fname.substring(f + 1) : fname;
				fis = new FileInputStream(file[i]);
				fos = new FileOutputStream(path + File.separator + name);
				while ((temp = fis.read(b, 0, b.length)) != -1) {
					fos.write(b, 0, temp);
				}
				fos.flush();
				fos.close();
				fis.close();
				str.append(name + " 上传成功 ");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		try {
			HttpServletResponse res = ServletActionContext.getResponse();
			res.setCharacterEncoding("UTF-8");
			PrintWriter out = res.getWriter();
			out.println("<script type=\"text/javascript\">parent.callback('" + str.toString() + "')</script>");
		} catch (IOException e) {
			e.printStackTrace();
		}
		return NONE;
	}
}


webwork的配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
	<package name="upload" namespace="/upload" extends="webwork-default">
        <action name="upload" class="net.androidla.action.UploadAction" method="upload">
        	<!-- 
	        <interceptor-ref name="fileUploadStack"/>
	         -->
	        <interceptor-ref name="fileUpload" >
           		<param name="maximumSize">2048000</param> 
                <param name ="allowedTypes" > 
                    image/bmp,image/png,image/gif,image/jpeg,image/x-png,image/pjpeg,application/x-zip-compressed
                </param> 
            </interceptor-ref > 
            <interceptor-ref name="defaultStack" />
        </action>
    </package>
</xwork>



前台jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/webwork" prefix="ww" %>
<%@ page import="com.opensymphony.xwork.ActionContext" %>
<%
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>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<script type="text/javascript">
		function getFileName(obj) {
			var file = document.getElementsByName("file");
			var filename = document.getElementsByName("filename");
			for (var i = 0; i < file.length; i ++) {
				if (obj == file[i]) {
					filename[i].value = file[i].value;
					break;
				}
			}
		}
		function callback(msg)
		{
		/*	document.getElementById("file").outerHTML = document.getElementById("file").outerHTML;*/
			document.getElementById("msg").innerHTML = "<font color=red>"+msg+"</font>";
		}
	</script>
  </head>
  
  <body>
	<form action="<%=path %>/upload/upload.action" id="form1" name="form1" encType="multipart/form-data" target="hidden_frame" method="post" >
	   	<input type="text" id="name" name="name" value="chen"><br>
		<input type="file" id="file1" name="file" style="width:450" onchange="getFileName(this);"><input type="hidden" id="filename1" name="filename"><br>
		<input type="file" id="file2" name="file" style="width:450" onchange="getFileName(this);"><input type="hidden" id="filename2" name="filename"><br>
		<input type="file" id="file3" name="file" style="width:450" onchange="getFileName(this);"><input type="hidden" id="filename3" name="filename"><br>
		<input type="file" id="file4" name="file" style="width:450" onchange="getFileName(this);"><input type="hidden" id="filename4" name="filename"><br>
		<input type="file" id="file5" name="file" style="width:450" onchange="getFileName(this);"><input type="hidden" id="filename5" name="filename"><br>
		<input type="file" id="file6" name="file" style="width:450" onchange="getFileName(this);"><input type="hidden" id="filename6" name="filename"><br>
		<INPUT type="submit" value="上传文件"><span id="msg"></span><br>
		<font color="red">支持"jpg", "jpeg", "gif", "zip"文件的上传</font>
		<iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
	</form>
  </body>
</html>



  • 大小: 20.1 KB
1
4
分享到:
评论
3 楼 longmain 2011-11-03  
 out.println("<script type=\"text/javascript\">parent.callback('" + str.toString() + "')</script>");   

这个会在struts处理完写回页面上的hidden frame里。那时候调用。
2 楼 nello 2011-08-23  
ydpiaoyun 写道
你好,请问function callback(msg)  这个回调函数在哪调用了,怎么没找到调用的地方呢。谢谢! QQ:495231441

out.println("<script type=\"text/javascript\">parent.callback('" + str.toString() + "')</script>"); 
1 楼 ydpiaoyun 2011-08-23  
你好,请问function callback(msg)  这个回调函数在哪调用了,怎么没找到调用的地方呢。谢谢! QQ:495231441

相关推荐

    struts2与webwork2

    - **拦截器机制**:这是WebWork2引入的一个重要概念,Struts2继承并发扬光大,通过拦截器链可以实现请求前后的处理逻辑,增强了框架的灵活性和功能多样性。 - **配置方式**:两者都支持XML配置,同时也支持注解配置...

    Migrating From Struts1 To Struts2

    ### 从Struts1迁移到Struts2 #### 引言 随着技术的发展与进步,Struts1作为曾经广泛使用的Web应用框架,逐渐被Struts2等新一代框架所取代。Struts2以其更加灵活的设计、丰富的特性以及更好的性能表现成为众多开发者...

    [Struts 2权威指南--基于WebWork核心的MVC开发(高清完整版) 1/12

    第1章 Struts 2概述,第2章 Struts 2下的HelloWorld,第3章 Struts 2基础,第4章 深入Struts 2,第5章 Struts 2的类型转换,第6章 文件的上传和下载.,第7章 Struts 2的拦截器,第8章 Struts 2的输入校验,9.2 ...

    Struts2-Webwork2-DWR

    Struts2、Webwork2 和 DWR 是三个在 Web 开发领域中至关重要的技术,尤其在构建企业级的 WEB2.0 应用程序时。接下来,我们将详细探讨这三个技术的核心概念、工作原理以及它们之间的关系。 **Struts2** 是一个基于 ...

    Struts 2 技术详解:基于WebWork核心的MVC开发与实践

    WebWork的这些特性被集成到Struts 2中,使得Struts 2成为了一个高效且易用的MVC框架。 **Struts 2的生命周期**: 1. 用户发起HTTP请求。 2. Struts 2 框架接收到请求,解析请求参数。 3. 拦截器链开始执行,按照...

    WebWork 文件上传

    在这个“WebWork 文件上传 多个文件上传 范例”中,我们将深入探讨如何使用WebWork实现多文件上传的功能。 首先,了解文件上传的基本原理是必要的。在HTTP协议中,文件上传通常通过POST请求实现,其中包含了...

    struts2开发入门以及webWork开发入门文档

    Struts2和WebWork是两种流行的Java Web框架,它们在构建MVC(Model-View-Controller)架构的应用程序中发挥着重要作用。Struts2实际上是WebWork的后续版本,吸收了WebWork的核心特性并进行了改进。这里我们将深入...

    03解决struts2配置文件无提示问题

    Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    fileupload+dwr2+webwork2实现带进度条上传文件

    "fileupload+dwr2+webwork2实现带进度条上传文件"这个主题涉及到三个关键技术和组件:FileUpload、Direct Web Remoting (DWR) 和 WebWork2,它们协同工作以提供一个带有进度条的高效、用户友好的文件上传体验。...

    struts2 关于多文件上传的使用

    ### Struts2 多文件上传实现详解 在Web开发中,文件上传是一项常见的功能需求,尤其是在需要用户批量上传文件的应用场景下。Struts2作为一款成熟的Java Web框架,提供了便捷的方式来处理多文件上传的需求。本文将...

    webwork 多文件上传

    本篇文章将深入探讨如何在WebWork框架下实现多文件上传,并结合实际案例进行解析。 首先,了解WebWork框架的基本原理是必要的。WebWork通过Action类处理HTTP请求,它将用户交互与业务逻辑分离,提供了一种优雅的...

    webwork开发文档 struts2学习助手

    【Webwork2 简介】 WebWork是由OpenSymphony组织开发的Java企业级Web框架,专注于组件化和代码重用。WebWork的核心组成部分包括Xwork和WebWork2。WebWork2.2.4是该框架的一个版本,它基于Xwork1构建,负责处理HTTP...

    webwork中上传文件

    在本例中,我们关注的是使用WebWork框架在Java环境中实现文件上传。WebWork是一个轻量级的MVC(Model-View-Controller)框架,它提供了处理HTTP请求和响应的强大工具,包括文件上传。 首先,我们需要了解WebWork的...

    struts2建立流程

    Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理...

    struts2对webwork的改进

    Struts2是对WebWork框架的重大升级和改进,它在保留WebWork强大特性的基础上,引入了更多优化和新特性,使得整个框架更加灵活且易于使用。以下将详细阐述Struts2对WebWork的改进点: 1. **配置文件的多样化**: 在...

    webwork文件上传

    在本教程中,我们将探讨如何利用WebWork实现文件上传功能,特别是针对Excel文件的处理。 首先,理解WebWork的MVC模式至关重要。在WebWork框架中,控制器负责接收用户请求,调用业务逻辑,并将结果传递给视图进行...

    struts2登录注册简单实现

    总的来说,这个“struts2登录注册简单实现”项目涵盖了Struts2框架的基础应用,包括Action的创建、配置文件的编写、视图设计、数据处理以及安全性考虑等多个方面。通过实践,开发者能更深入地理解Struts2的架构和...

    Struts 2 began as WebWork.

    Ajax允许在不刷新整个页面的情况下更新部分内容,与Struts 2的Action和拦截器配合使用,可以创建高度动态的Web应用。 - **Adam.Bien.Real.World.Java.EE.Patterns.Jun.2009.pdf**:这本书可能探讨了Java企业版...

    struts2+ajax 无刷新验证身份证号是否已注册,身份证号是否正确

    Struts2支持拦截器、类型转换、文件上传、国际化、主题等功能,这些特性使得开发者能够快速构建出稳定高效的Web应用。 ##### 2.2 AJAX技术介绍 AJAX(Asynchronous JavaScript and XML),即异步JavaScript和XML,...

    struts2中文学习文档

    从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...

Global site tag (gtag.js) - Google Analytics