Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 Struts 2 文件上传是基于 Apache Commons FileUpload 组件实现的,这个组件处理 HTTP 请求中的多部分数据,将上传的文件保存到服务器的临时目录。Struts 2 的 fileUpload 拦截器则负责将这些文件绑定到 Action 对象的属性上,使得开发者可以像操作本地文件一样对上传文件进行处理。 在 Struts 2 中实现文件上传,首先需要在 JSP 页面创建一个支持多部分数据的表单。例如,在 `FileUpload.jsp` 文件中,表单的 `method` 应设置为 `POST`,`enctype` 应设置为 `multipart/form-data`。此外,使用 `<s:file>` 标签将文件上传控件与 Action 中的某个字段(如 `myFile`)绑定,这样 Struts 2 就知道如何处理文件上传请求。 下面是一个简单的 `FileUpload.jsp` 示例: ```jsp <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Struts 2 File Upload</title> </head> <body> <s:form action="fileUpload" method="POST" enctype="multipart/form-data"> <s:file name="myFile" label="Image File" /> <s:textfield name="caption" label="Caption" /> <s:submit /> </s:form> </body> </html> ``` 接着,你需要创建一个 Action 类来处理上传的文件。例如,你可以创建一个名为 `FileUploadAction` 的 Java 类,继承自 `ActionSupport`,并包含处理文件上传所需的方法和属性。这些属性包括 `File` 类型的属性(如 `myFile`),用于存储上传文件的临时路径,以及与文件相关的其他属性,如 `contentType` 和 `fileName`。 ```java package tutorial; import java.io.*; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class FileUploadAction extends ActionSupport { private static final long serialVersionUID = 572146812454l; private static final int BUFFER_SIZE = 16 * 1024; private File myFile; private String contentType; private String fileName; // 其他相关属性... // getter 和 setter 方法... public String execute() throws Exception { // 在这里处理文件上传 // ... } // 示例方法:将上传的文件移动到服务器的指定位置 private void moveUploadedFile() { String realPath = ServletActionContext.getServletContext().getRealPath("/"); File targetFile = new File(realPath + "uploads/" + getFileName()); InputStream is = null; OutputStream os = null; try { is = new FileInputStream(getMyFile()); os = new FileOutputStream(targetFile); byte[] buffer = new byte[BUFFER_SIZE]; int length; while ((length = is.read(buffer)) != -1) { os.write(buffer, 0, length); } } catch (IOException e) { // 处理异常 } finally { if (is != null) { try { is.close(); } catch (IOException e) { // 忽略 } } if (os != null) { try { os.close(); } catch (IOException e) { // 忽略 } } } } } ``` 在 `execute()` 方法中,你可以处理文件上传,例如将上传的文件移动到服务器的特定位置,或者执行其他业务逻辑。在上面的示例中,`moveUploadedFile()` 方法展示了如何将上传的文件移动到 `uploads` 目录下。 为了使 Struts 2 能够正确处理文件上传,还需要在 `struts.xml` 配置文件中添加 `fileUpload` 拦截器到 Action 的配置中。例如: ```xml <package name="default" namespace="/" extends="struts-default"> <action name="fileUpload" class="tutorial.FileUploadAction"> <interceptor-ref name="defaultStack"/> <!-- 添加 fileUpload 拦截器 --> <interceptor-ref name="fileUpload"> <param name="maximumSize">1048576</param> <!-- 1MB --> <param name="allowedTypes">image/jpeg,image/png</param> </interceptor-ref> <result name="success">/FileUploadSuccess.jsp</result> </action> </package> ``` 在这个配置中,`fileUpload` 拦截器设置了最大文件大小和允许的文件类型。当文件上传成功后,用户会被重定向到 `FileUploadSuccess.jsp` 页面。 总结来说,Struts 2 文件上传的核心步骤包括: 1. 在 JSP 页面创建一个支持多部分数据的表单,并使用 `<s:file>` 标签绑定文件上传控件。 2. 创建一个 Action 类,包含处理文件上传的属性和方法。 3. 在 `struts.xml` 中配置 `fileUpload` 拦截器,并指定文件大小限制和类型。 4. 在 Action 中处理文件上传,如移动文件到服务器指定位置。 通过这种方式,Struts 2 提供了一种简单、直观的方式来处理 Web 应用中的文件上传功能。
剩余10页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip
- (源码)基于C语言的操作系统实验项目.zip
- (源码)基于C++的分布式设备配置文件管理系统.zip
- (源码)基于ESP8266和Arduino的HomeMatic水表读数系统.zip
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip