Struts2 文件上传步骤详解

需积分: 3 1 下载量 116 浏览量 更新于2024-09-17 收藏 137KB DOC 举报
"struts2文件上传教程" 在Java Web开发中,Struts2是一个非常流行的MVC框架,它提供了一种优雅的方式来处理用户请求和业务逻辑。本文将深入讲解如何在Struts2框架中实现文件上传功能。 首先,为了支持文件上传,我们需要引入两个关键的库:`commons-fileupload-1.2.1.jar` 和 `commons-io-1.3.2.jar`。这两个库是Apache Commons项目的一部分,提供了文件上传的基本操作。将它们添加到你的项目的`WEB-INF/lib`目录下,确保Struts2能够访问这些依赖。 在HTML表单中,文件上传需要设置`enctype`属性为`multipart/form-data`。这是个重要的步骤,因为这告诉浏览器以多部分/数据格式发送表单数据,包括文件内容。下面是一个简单的HTML表单示例: ```html <form action="${pageContext.request.contextPath}/control/employee/list_execute.action" enctype="multipart/form-data" method="post"> 文件: <input type="file" name="image"> <input type="submit" value="上传"> </form> ``` 这里的`${pageContext.request.contextPath}`是一个EL(Expression Language)表达式,用于获取服务器的根路径,确保表单提交到正确的地址。 接下来,我们需要在Struts2的Action类中创建对应的属性来接收上传的文件。例如: ```java public class HelloWorldAction { private File image; // 与jsp表单中的名称对应 private String imageFileName; // FileName为固定格式 private String imageContentType; // ContentType为固定格式 // getters and setters... public String getImageContentType() { return imageContentType; } public void setImageContentType(String imageContentType) { this.imageContentType = imageContentType; } // 其他getter和setter方法... } ``` 这里的`File`对象`image`用于存储上传文件的内容,而`imageFileName`和`imageContentType`则分别用来保存文件的原始名称和MIME类型。 在处理表单提交的Action方法中,你需要使用`CommonsFileUpload`库来解析请求并读取上传的文件。Struts2默认集成了`CommonsFileUpload`,所以可以直接使用`ServletActionContext`来访问上传的文件: ```java public String execute() throws IOException { ServletActionContext context = ServletActionContext.getContext(); HttpServletRequest request = (HttpServletRequest) context.getRequest(); FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); try { List<FileItem> items = upload.parseRequest(request); for (FileItem item : items) { if (!item.isFormField()) { // 处理文件项 image = item.getInputStream(); imageFileName = item.getName(); imageContentType = item.getContentType(); // 这里可以进行文件的保存、处理等操作 } } } catch (FileUploadException e) { // 处理上传异常 } // 业务逻辑... return "success"; // 或其他结果码 } ``` 最后,记得在Struts2的配置文件(通常为`struts.xml`)中配置这个Action,以便Struts2知道如何处理相关的HTTP请求。 通过以上步骤,你就可以在Struts2应用中实现基本的文件上传功能了。不过,实际开发中还需要考虑文件大小限制、错误处理、文件重命名、安全问题(如防止路径遍历攻击)等,以确保应用的稳定性和安全性。