### Struts2实现文件上传案例
#### 概述
本文将详细介绍如何利用Struts2框架实现文件上传功能。Struts2是Apache软件基金会的一个开源Web应用框架,它使用MVC设计模式并支持多种编程模式(如命令式、声明式、函数式等),非常适合构建大型、复杂的Web应用程序。
#### 步骤详解
##### 第一步:创建文件存储目录
1. **在`webRoot`目录下新建`upload`文件夹**:
- 目的是为上传的文件提供一个存储位置。
- `webRoot`通常是Web应用程序的主要目录,所有可以被Web服务器直接访问的文件都应该放置在这里。
##### 第二步:构建上传界面
1. **创建`upload.jsp`页面**:
- 这个JSP页面用于展示用户上传文件的表单。
- 表单应设置为`multipart/form-data`类型,因为只有这种类型的表单才能正确处理文件数据。
- 示例代码:
```html
<html>
<body>
<form action="upload" method="post" enctype="multipart/form-data">
选择文件: <input type="file" name="uploadFile" />
<input type="submit" value="上传" />
</form>
</body>
</html>
```
##### 第三步:设计反馈页面
1. **编写上传成功或失败的提示界面**:
- **成功页面**:`uploadSuccess.jsp`
- 显示上传成功的消息。
- 可以显示文件名和上传时间等信息。
- **失败页面**:`uploadError.jsp`
- 显示上传失败的消息,并给出可能的原因。
- 例如:文件格式不正确、文件大小超出限制等。
##### 第四步:编写Action类
1. **创建Action类**:
- 实现`org.apache.struts2.interceptor.FileUploadInterceptor.FileUploadAware`接口来处理文件上传逻辑。
- 示例代码:
```java
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.FileUploadAware;
public class UploadAction extends ActionSupport implements FileUploadAware {
private File uploadFile;
private String uploadFileName;
private File file;
public String execute() throws Exception {
// 文件保存路径
String path = "D:/webapps/yourProject/upload/";
if (uploadFile != null) {
// 将文件保存到指定路径
file = new File(path + uploadFileName);
FileUtil.copyFile(uploadFile, file);
return SUCCESS;
} else {
return ERROR;
}
}
// getter和setter方法
public void setUploadFile(File uploadFile) {
this.uploadFile = uploadFile;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
}
```
##### 第五步:配置Struts.xml文件
1. **配置Struts.xml文件**:
- 配置`fileUpload`拦截器,并确保其在其他拦截器之前执行。
- 示例配置:
```xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<package name="default" namespace="/" extends="struts-default">
<action name="upload" class="com.example.UploadAction">
<interceptor-ref name="fileUpload">
<param name="maximumSize">1000000</param> <!-- 设置最大文件大小 -->
</interceptor-ref>
<result name="success">/uploadSuccess.jsp</result>
<result name="error">/uploadError.jsp</result>
</action>
</package>
</struts>
```
##### 第六步:进行测试
1. **运行测试**:
- 启动Tomcat服务器。
- 访问`upload.jsp`页面,尝试上传文件。
- 测试完成后,在Tomcat的`webapps`目录下对应项目的`upload`文件夹中检查文件是否成功上传。
#### 总结
通过以上步骤,我们成功实现了基于Struts2框架的文件上传功能。这个过程不仅涉及到了前端表单的设计、后端业务逻辑的处理,还涉及到Struts2框架配置的理解与实践。希望这篇详细的案例能够帮助大家更好地理解和掌握Struts2中的文件上传机制。