Struts1.x 实现文件上传

在Struts1中,提供了较好的文件上传方法。
下面我通过一个简单的例子实现一个简单的文件上传功能:
A.通过MyEclipse新建一个java Web Project,命名为UpLoadWeb
B.为Web工程导入Struts1包(具体怎么操作可以GOOGLE)。
C.新建文件上传Action,UploadAction。
D.新建文件上传Form,UploadForm
E.将UploadAction和UploadForm配置到struts-config.xml中这样的话,整个工程的结构就已经搭建完成,接下来就是实现文件上传的功能了。

F.新建一个类命名为UploadFileClass,实现文件输出的功能。

package com.yourcompany.upload;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.struts.upload.FormFile;

public class UploadFileClass {
	// 方法用于上传文件到远程服务器上
	public UploadFileClass(FormFile formFile, String fileName,
			String toServerPath) throws Exception {
		if (formFile != null && toServerPath != null) {
			InputStream inputStream = formFile.getInputStream();
			OutputStream outputStream = new FileOutputStream(toServerPath + "/"
					+ fileName);
			int bytesRead = 0;
			byte[] bytesBuf = new byte[formFile.getFileSize()];

			while ((bytesRead = inputStream.read(bytesBuf)) != -1) {
				outputStream.write(bytesBuf, 0, bytesRead);
			}
			outputStream.write(bytesBuf);
			outputStream.close();
			inputStream.close();
		} else {
			throw new Exception("This error caused by some parameters is null!");
		}
	}
}


G.在UploadAction中添加代码如下,调用UploadFileClass中的上传方法:


package com.yourcompany.struts.action;


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;


import com.yourcompany.struts.form.UploadForm;
import com.yourcompany.upload.UploadFileClass;


public class UploadAction extends Action {
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		UploadForm uploadForm = (UploadForm) form;
		FormFile formFile = uploadForm.getUploadFile();
		try {
			String fileName = formFile.getFileName();
			System.out.println(fileName);
			String toServerPath = request.getRealPath("/");
			UploadFileClass uploadFileClass = new UploadFileClass(formFile,
					fileName, toServerPath);
			return mapping.findForward("success");
		} catch (Exception e) {
			e.printStackTrace();
			return mapping.findForward("failed");
		}
	}
}



H.为表单添加验证功能。


package com.yourcompany.struts.form;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

public class UploadForm extends ActionForm {
	private FormFile uploadFile;

	public ActionErrors validate(ActionMapping mapping,
			HttpServletRequest request) {
		ActionErrors errors = new ActionErrors();
		String fileName = uploadFile.getFileName();
		if (fileName == null || "".equals(fileName)) {
			errors.add("uploadFile", new ActionError("noUserFile"));
		}
		return errors;
	}

	public void reset(ActionMapping mapping, HttpServletRequest request) {
	}

	public FormFile getUploadFile() {
		return uploadFile;
	}

	public void setUploadFile(FormFile uploadFile) {
		this.uploadFile = uploadFile;
	}
}

I.主要页面upload.jsp


<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>


<html>
	<head>
		<title>JSP for UploadForm form</title>
	</head>
	<body>
		<html:form action="/upload" enctype="multipart/form-data">
			uploadFile : <html:file property="uploadFile" />
			<font color="#FF00"><html:errors property="uploadFile" /></font>
			<br />
			<html:submit />
			<html:cancel />
		</html:form>
	</body>
</html>

J.上传成功页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	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>
	</head>

	<body>
		文件上传成功!
	</body>
</html>

K.上传失败页面

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
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>
    <title>My JSP 'failed.jsp' starting page</title>
  </head>
  
  <body>
  文件上传失败!
  </body>
</html>

L.struts-config.xml配置信息

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
	<data-sources />
	<form-beans>
		<form-bean name="uploadForm" type="com.yourcompany.struts.form.UploadForm" />

	</form-beans>
	<global-exceptions />
	<global-forwards />
	<action-mappings>
		<action attribute="uploadForm" input="/upload.jsp" name="uploadForm"
			path="/upload" scope="request" type="com.yourcompany.struts.action.UploadAction">
			<set-property property="cancellable" value="true" />
			<forward name="success" path="/success.jsp"></forward>
			<forward name="failed" path="/failed.jsp"></forward>
		</action>
	</action-mappings>
	<message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>

M.web.xml配置信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	version="2.5"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<display-name />
	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/struts-config.xml</param-value>
		</init-param>
		<init-param>
			<param-name>debug</param-name>
			<param-value>3</param-value>
		</init-param>
		<init-param>
			<param-name>detail</param-name>
			<param-value>3</param-value>
		</init-param>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	<welcome-file-list>
		<welcome-file>upload.jsp</welcome-file>
	</welcome-file-list>
</web-app>

================================OVER============================

工程源码请到地址:

http://download.csdn.net/detail/captaingan/4109944

下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值