开发工具Eclipse3.20+MyEclipse
struts-config.xml内容如下:
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<
struts-config
>
<
data-sources
/>
<
form-beans
>
<
form-bean
name
="upfileForm"
type
="com.form.UpfileForm"
/>
</
form-beans
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<
global-exceptions
/>
<
global-forwards
/>
<
action-mappings
>
<
action
attribute
="upfileForm"
//不清楚作用??
input
="/upfile.jsp"
name
="upfileForm"
path
="/upfile"
scope
="request"
type
="com.action.UpfileAction"
>
<
forward
name
="success"
path
="/upfileSuccess.jsp"
/>
<
forward
name
="failure"
path
="/upfile.jsp"
/>
</
action
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
</
action-mappings
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<
message-resources
parameter
="com.ApplicationResources"
/>
</
struts-config
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
形成图像如下:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/cfan_haifeng/未命名2.JPG)
意义如下:
上传成功---------com.action.UpfileFileAction------------------->upfileSuccess.jsp
上传失败----------------------------->upfile.jsp(即返回上传页面)
其中com.action.UpfileFileAction代码如下:
/**/
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package
com.action;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
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
com.form.UpfileForm;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
//手动添加包
import
org.apache.struts.upload.FormFile;
import
java.io.
*
;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/** */
/**
* MyEclipse Struts Creation date: 05-11-2007
*
* XDoclet definition:
*
* @struts.action path="/upfile" name="upfileForm" input="/upfile.jsp"
* scope="request" validate="true"
*/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
UpfileAction
extends
Action
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* Generated Methods
*/
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//**
* Method execute
*
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
HttpServletRequest request, HttpServletResponse response) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
UpfileForm upfileForm = (UpfileForm) form;
// TODO Auto-generated
//
FormFile file1 = upfileForm.getTheFile1();// 取得上传的文件
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
// 上传
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
// 文件大小
String fileSize = Integer.toString(file1.getFileSize()) + "字节";
upfileForm.setFileSize(fileSize);
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* 取当前系统路径(其中S_Upfile为当前context)
*/
String filePath = this.getServlet().getServletContext()
.getRealPath("/");
System.out.print("当前系统路径"+filePath);//D:/tomcat5/webapps/S_Upfile
// 上传文件1
InputStream stream = file1.getInputStream();// 把文件读入
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* 建立一个上传文件的输出流 如果是linux系统请把UploadFiles后的"//"换成"/",应该有更通用的方法,请大家帮忙啊
*/
//D:/Tomcat5/webapps/S_Upfile/UploadFiles/XX.JPG
String fileName = filePath + "UploadFiles/" + file1.getFileName();
upfileForm.setFileName(fileName);// 这里曾经出现过莫名奇妙的错误,出现“UploadFiles访问被拒绝”
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
OutputStream bos = new FileOutputStream(fileName);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
int bytesRead = 0;
byte[] buffer = new byte[8192];
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) ...{
bos.write(buffer, 0, bytesRead);// 将文件写入服务器
}
bos.close();
stream.close();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (Exception e) ...{
System.err.print(e);// 输出至控制台
// throw new RuntimeException(e.getMessage());
return mapping.findForward("failure");
}
return mapping.findForward("success");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
上传页面upfile.jsp如下(注意:要有enctype="multipart/form-data" )
<%
...
@ page language="java" pageEncoding="gb2312"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<
html
>
<
head
>
<
title
>
用Struts上传文件
</
title
>
</
head
>
<
body
>
<
h1
>
用Struts上传文件
</
h1
>
<
html:errors
/>
<
html:form
action
="/upfile"
enctype
="multipart/form-data"
method
="post"
>
文件1 :
<
html:file
property
="theFile1"
/>
<
html:errors
property
="theFile1"
/>
<
br
/>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<
html:submit
/>
<
html:cancel
/>
</
html:form
>
</
body
>
</
html
>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
与其相关的bean,UpfileForm为:
/**/
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package
com.form;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
javax.servlet.http.HttpServletRequest;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
import
org.apache.struts.action.ActionForm;
import
org.apache.struts.action.ActionMapping;
//
import
org.apache.struts.action.ActionMessage;
import
org.apache.struts.action.ActionError;
import
org.apache.struts.action.ActionMessages;
import
org.apache.struts.action.ActionErrors;
//
import
org.apache.struts.upload.FormFile;
import
org.apache.struts.upload.MultipartRequestHandler;
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/** */
/**
* MyEclipse Struts Creation date: 05-11-2007
*
* XDoclet definition:
*
* @struts.form name="upfileForm"
*/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
class
UpfileForm
extends
ActionForm
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* Generated fields
*/
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//** theFile1 property */
private FormFile theFile1=null;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/** *//** theFile2 property */
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
private String fileName;// 用来存储上传文件所在的目录
private String fileSize;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
/**//*
* Generated Methods
*/
public ActionErrors validate(ActionMapping mapping,
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
HttpServletRequest request) ...{
// 初始化一个ActionErrors对象
ActionErrors errors = new ActionErrors();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(theFile1==null)...{ //本意是防止未有添加任何文件就上传,但似乎没有用,希望高手来解决
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError(
"theFile1"));
}
//可能是防止路径太深(来源与http://dev.csdn.net/article/50/50395.shtm)
Boolean maxLengthExceeded = (Boolean) request
.getAttribute(MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED);
if ((maxLengthExceeded != null) && (maxLengthExceeded.booleanValue()))
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
...{
//向errors添加第1个错误
errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError(
"maxLengthExceeded"));
}
//errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionError("error.null"));
return errors;// 如果errors不为空,Struts框架就会将请求发会页面
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public FormFile getTheFile1() ...{
return theFile1;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setTheFile1(FormFile theFile1) ...{
this.theFile1 = theFile1;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
// 这里必须是public否则将会出现“不可视”的错误
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getFileName() ...{
return fileName;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setFileName(String fileName) ...{
this.fileName = fileName;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public String getFileSize() ...{
return fileSize;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
public void setFileSize(String fileSize) ...{
this.fileSize = fileSize;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
上传成功后转入upfileSuccess.jsp的代码如下:
<%
@ page language
=
"
java
"
pageEncoding
=
"
gb2312
"
%>
<%
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-bean
"
prefix
=
"
bean
"
%>
<%
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-html
"
prefix
=
"
html
"
%>
<%
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-logic
"
prefix
=
"
logic
"
%>
<%
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-tiles
"
prefix
=
"
tiles
"
%>
<%
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-template
"
prefix
=
"
template
"
%>
<%
@ taglib uri
=
"
http://jakarta.apache.org/struts/tags-nested
"
prefix
=
"
nested
"
%>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
<
html:html
locale
="true"
>
<
head
>
<
html:base
/>
<
title
>
上传成功
</
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"
>
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</
head
>
<
body
>
文件已被上传至
<
bean:write
name
="upfileForm"
property
="fileName"
/><
br
> //upfileForm不要写错,否则会出现“XXXBean不能找到”的错误
<
bean:write
name
="upfileForm"
property
="fileSize"
/><
br
>
</
body
>
</
html:html
>
运行情况如下:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/cfan_haifeng/11.jpg)
成功后界面:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/cfan_haifeng/未命名.JPG)
还有资源文件ApplicationResources_zh.properties
theFile1=请选择上传内容<br> #不知道为何不发挥作用
maxLengthExceeded=The path is too deep
参考文献:
Struts Web设计与开发大全
Struts编程基础与实例详解
http://dev.csdn.net/article/50/50395.shtm