Struts2实现图片上传教程

4星 · 超过85%的资源 需积分: 9 7 下载量 106 浏览量 更新于2024-09-13 收藏 536KB PDF 举报
"在Struts2中上传图片文件的详细步骤和源代码示例" 在Struts2框架中上传图片文件是一项常见的功能,这通常涉及到前端表单提交、后端处理以及文件存储。以下是实现这一功能的具体步骤和相关源代码。 一、环境准备 1. 创建一个名为`UploadFile`的Web项目。 2. 添加Struts2框架所需的库文件到项目的`WebRoot/WEB-INF/lib`目录,并在项目属性中将其加入到构建路径。通过【JavaBuildPath】 -> 【Libraries】选项卡 -> 【AddJARs】来添加所有jar包。 二、配置文件修改 3. 修改`web.xml`配置文件,配置Struts2的过滤器。配置如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <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> </web-app> ``` 4. 创建`struts.xml`配置文件,定义Action和结果页面。例如: ```xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- ... --> <package name="default" namespace="/" extends="struts-default"> <action name="upload" class="cn.hw.struts2.UploadAction"> <result name="success">uploadOK.jsp</result> <result name="input">uploadFile.jsp</result> </action> </package> </struts> ``` 在这个配置中,我们定义了一个名为`upload`的Action,类为`cn.hw.struts2.UploadAction`,成功后返回`uploadOK.jsp`,失败则返回`uploadFile.jsp`。 三、编写Action类 5. 在`src`目录下的`cn.hw.struts2`包中创建`UploadAction.java`,实现文件上传逻辑。例如: ```java import org.apache.struts2.interceptor.FileUploadInterceptor; import com.opensymphony.xwork2.ActionSupport; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; public class UploadAction extends ActionSupport { private List<File> file; // 用于接收上传的文件 private List<String> fileName; // 文件名 private List<String> fileContentType; // 文件类型 // getters and setters... public String execute() { if (file != null && !file.isEmpty()) { File saveDir = new File("WebContent/upload"); // 设置文件保存的目录 if (!saveDir.exists()) { saveDir.mkdirs(); } for (int i = 0; i < file.size(); i++) { File itemFile = file.get(i); String fileName = this.fileName.get(i); String filePath = saveDir.getAbsolutePath() + File.separator + fileName; try (FileOutputStream fos = new FileOutputStream(filePath)) { fos.write(itemFile.getBytes()); } catch (IOException e) { e.printStackTrace(); return INPUT; } } } return SUCCESS; } } ``` 在这个Action中,我们使用了Struts2的`FileUploadInterceptor`拦截器来处理文件上传,将上传的文件保存到服务器的指定目录。 四、创建前端页面 6. 创建两个JSP页面:`uploadFile.jsp`用于显示上传表单,`uploadOK.jsp`用于显示上传成功的消息。例如: `uploadFile.jsp`: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>上传图片</title> </head> <body> <form action="upload.action" method="post" enctype="multipart/form-data"> <input type="file" name="file" multiple/> <input type="submit" value="上传"/> </form> </body> </html> ``` `uploadOK.jsp`: ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>上传成功</title> </head> <body> <h1>图片上传成功!</h1> </body> </html> ``` 五、项目目录结构 项目的目录结构如下(假设): - WebRoot - uploadFile.jsp - uploadOK.jsp - WEB-INF - lib - 所需的Struts2和其他依赖库 - classes - cn - hw - struts2 - UploadAction.class - web.xml - upload - 上传的图片文件将保存在这里 通过以上步骤,我们完成了在Struts2中上传图片文件的基本流程,包括前端表单、后端处理和配置文件的设置。实际应用中,你可能还需要考虑错误处理、文件大小限制、文件类型的检查等安全问题。