Struts2是一个流行的Java web框架,它为开发者提供了构建MVC(模型-视图-控制器)应用程序的强大工具。在Struts2中实现文件上传功能是常见的需求,这通常涉及到前端表单的创建、后端Action类的处理以及必要的配置设置。
一、Struts2环境搭建
在开始文件上传之前,首先需要确保已经正确地搭建了Struts2环境。这可以通过IDE(如MyEclipse)中的插件快速完成,或者手动配置。手动配置时,你需要下载Struts2的核心库,然后在项目的web.xml中添加Struts2的过滤器配置:
```xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
```
二、文件上传实现
1. **前端表单**:
前端页面需要创建一个HTML表单,使用`<form>`标签,设置`method`为`post`,`enctype`为`multipart/form-data`,这是上传文件所必需的。例如:
```html
<body>
<form action="upload.action" method="post" enctype="multipart/form-data">
<input type="file" name="upload"/>
<input type="submit" value="提交"/>
<br>
${result}
</form>
</body>
```
这里的`name`属性`upload`与后端Action类的属性对应。
2. **后端Action处理**:
后端Action类继承自`ActionSupport`,并添加用于接收上传文件的属性,如`File upload`、`String uploadContentType`和`String uploadFileName`。这些属性在Struts2的自动绑定机制下,会根据表单字段的`name`自动填充。
```java
package com.yf.action;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
private File upload;
private String uploadContentType;
private String uploadFileName;
private String result;
// getters and setters...
@Override
public String execute() throws Exception {
String path = ServletActionContext.getServletContext().getRealPath("/images");
File file = new File(path);
if (!file.exists()) {
file.mkdir();
}
FileUtils.copyFile(upload, new File(file, uploadFileName));
result = "上传成功";
return "success";
}
}
```
这里的`execute`方法处理文件上传逻辑,将上传的文件保存到服务器指定路径,并设置返回消息。
3. **结果展示**:
如果文件上传成功,可以返回一个“success”结果,对应视图展示上传成功的信息;如果失败,可以返回错误信息,比如使用Struts2的`<s:fielderror>`标签显示错误信息。
```html
<body>
<h2>上传结果</h2>
<s:if test="hasFieldErrors()">
<s:fielderror/>
</s:if>
</body>
```
在使用`<s:fielderror>`标签之前,需要在JSP页面导入Struts2的标签库:
```jsp
<%@ taglib uri="/struts-tags" prefix="s"%>
```
总结:
Struts2通过提供内置的文件上传支持,使得在Java web应用中处理文件上传变得简单。开发者只需要关注前端表单的构造、后端Action的接收与处理,以及配置文件的正确设置,即可实现完整的文件上传功能。在这个过程中,Struts2的自动绑定、异常处理以及结果映射机制都极大地简化了开发流程。