上传文件页面,
<!---------------------文件名:upload.jsp----------------->
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>上传文件</title>
</head>
<body>
<!-- 上传文件表单定义 -->
<s:form action="AddCommodityAction" method="post" enctype="multipart/form-data">
<tr>
<!-- 上传文件标签定义 -->
<td>上传文件:<input type="file" name="uploadImage"></td> </tr>
<tr>
<td align="left"><s:submit name="submit" value="提交"></s:submit></td>
</tr>
</s:form>
</body>
</html>
action处理页面
package com.jing.action;
import java.io.File;
import java.io.IOException;
import java.util.*;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.jing.dao.*;
import com.jing.po.*;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class AddCommodityAction extends ActionSupport{
private List<CommodityClass> commodityClass;
private CommodityClassDao commodityClassDao;
private CommodityDao commodityDao;
private String commodityName; //商品名称
private String commodityClassName; //商品种类
private String manufacturer; //生产厂家
private String commodityDesc; //商品描述
private Double commodityPrice; //商品价格
private Double EPrice; //网上价格
private File uploadImage; //临时文件
private String uploadImageContentType; //上传图片临时文件 类型
private String uploadImageFileName; //上传图片临时文件 真实文件名
public String execute() {
//上传文件开始
String realPath=ServletActionContext.getServletContext().getRealPath("admin/uploadImages");
System.out.println("RealPath---:"+realPath);
String dir=null;
if (uploadImage != null) {
File savefile = new File(new File(realPath), uploadImageFileName);
dir = savefile.getPath();
System.out.println("dir---:"+dir);
if (!savefile.getParentFile().exists())
savefile.getParentFile().mkdirs();
try {
FileUtils.copyFile(uploadImage, savefile);
} catch (IOException e) {
e.printStackTrace();
}
}
//上传文件结束
//保存商品数据到数据库 start
Commodity commodity = new Commodity();
commodity.setCommodityName(commodityName);
commodity.setCommodityClassName(commodityClassName);
commodity.setManufacturer(manufacturer);
commodity.setCommodityDesc(commodityDesc);
commodity.setCommodityPrice(commodityPrice);
commodity.setEPrice(EPrice);
commodity.setImage(dir);
commodityDao.save(commodity);
//保存商品数据 end
System.out.println("commodityName---:"+commodityName);
System.out.println("commodityClassName---:"+commodityClassName);
System.out.println("uploadImage---:"+uploadImage);
System.out.println("dir---:"+dir);
System.out.println("uploadImageContentType---:"+uploadImageContentType);
System.out.println("uploadImageFileName---:"+uploadImageFileName);
return SUCCESS;
}
public String getCommodityClassName() {
return commodityClassName;
}
public void setCommodityClassName(String commodityClassName) {
this.commodityClassName = commodityClassName;
}
public String getCommodityName() {
return commodityName;
}
public void setCommodityName(String commodityName) {
this.commodityName = commodityName;
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getCommodityDesc() {
return commodityDesc;
}
public void setCommodityDesc(String commodityDesc) {
this.commodityDesc = commodityDesc;
}
public Double getCommodityPrice() {
return commodityPrice;
}
public void setCommodityPrice(Double commodityPrice) {
this.commodityPrice = commodityPrice;
}
public Double getEPrice() {
return EPrice;
}
public void setEPrice(Double ePrice) {
EPrice = ePrice;
}
public File getUploadImage() {
return uploadImage;
}
public void setUploadImage(File uploadImage) {
this.uploadImage = uploadImage;
}
public String getUploadImageContentType() {
return uploadImageContentType;
}
public void setUploadImageContentType(String uploadImageContentType) {
this.uploadImageContentType = uploadImageContentType;
}
public String getUploadImageFileName() {
return uploadImageFileName;
}
public void setUploadImageFileName(String uploadImageFileName) {
this.uploadImageFileName = uploadImageFileName;
}
public void setCommodityClassDao(CommodityClassDao commodityClassDao) {
this.commodityClassDao = commodityClassDao;
}
public List<CommodityClass> getCommodityClass() {
return commodityClass;
}
public void setCommodityClass(List<CommodityClass> commodityClass) {
this.commodityClass = commodityClass;
}
public void setCommodityDao(CommodityDao commodityDao) {
this.commodityDao = commodityDao;
}
}
struts.xml文件
<!-----------------------文件名:struts.xml------------------> <struts> <!-- Action所在包定义 --> <package name="C04.4" extends="struts-default"> <!-- Action名字,类以及导航页面定义 --> <!-- 通过Action类处理才导航的的Action定义 --> <action name="AddCommodityAction" class="com.jing.action.AddCommodityAction"> <result name="input">/jsp/upload.jsp</result> <result name="success">/jsp/result.jsp</result> </action> <!—显示配置文件上传拦截器 --> <interceptor-ref name=”fileUpload”> <!—指定特定类型的上传文件 --> <param name =”allowedTypes”>text/plain,application/xml</param> </ interceptor-ref > <interceptor-ref name=”defaultStack”></ interceptor-ref > </package> </struts>
定义了一个名为“allowedTypes”的参数,其中在<param></param>之间的是文件类型,也可以用“,”间隔,表示允许上传多个文件类型。这里允许上传文件类型为txt、xml格式的文件。如果读者不知道各个文件类型的定义,可在自己的JBoss安装目录中的server\default\deploy\jboss-web.deployer\conf\下的web.xml文件中找到(搜索<mime-mapping>即可)。注意:如果显示配置Struts2自己的缺省拦截器一定要写在“defaultStack”前,否则“fileUpload”拦截器不会执行拦截。因为Struts2中如果某个拦截器执行拦截时候发现自己已经执行过,第二个乃至之后同名的拦截器都不会执行。这里因为“defaultStack”拦截器栈中包含了“fileUpload”拦截器,而“fileUpload”拦截器已经执行拦截了,则不会再执行拦截。如果把“defaultStack”拦截器栈放在“fileUpload”拦截器前配置,则只执行“defaultStack”拦截器栈中的“fileUpload”拦截器,这里是没有定义“allowedTypes”的,Struts2缺省默认的是支持所有文件类型。因此它会支持所有文件类型的文件上传。因此再设定“allowedTypes”就没有任何意义了。