jsp 语言 JSP 实现文件上传的 Struts2 方案

JSP阿木 发布于 2025-06-26 11 次阅读


JSP实现文件上传的Struts2方案详解

文件上传是Web应用中常见的需求,用户可以通过Web界面上传文件到服务器。在Java Web开发中,Struts2是一个流行的MVC框架,它提供了强大的文件上传功能。本文将围绕JSP实现文件上传的Struts2方案,详细讲解其实现过程和相关技术。

环境准备

在开始之前,请确保以下环境已经搭建好:

1. JDK 1.7及以上版本

2. Tomcat 7及以上版本

3. Struts2 2.3.16及以上版本

4. Eclipse或IDEA等开发工具

Struts2文件上传原理

Struts2文件上传主要依赖于`struts2-core`包中的`struts2-fileupload`插件。该插件提供了`MultipartRequest`类,用于处理文件上传请求。

当用户提交表单时,如果表单中包含文件输入项,则Struts2会自动将请求转换为`MultipartRequest`对象。然后,开发者可以通过`MultipartRequest`对象获取上传的文件信息,如文件名、文件类型、文件大小等。

实现步骤

1. 创建项目

在Eclipse或IDEA中创建一个Maven项目,并添加以下依赖:

xml

<dependencies>


<dependency>


<groupId>org.apache.struts</groupId>


<artifactId>struts2-core</artifactId>


<version>2.3.16</version>


</dependency>


<dependency>


<groupId>javax.servlet</groupId>


<artifactId>javax.servlet-api</artifactId>


<version>3.1.0</version>


<scope>provided</scope>


</dependency>


</dependencies>


2. 配置web.xml

在`src/main/webapp/WEB-INF/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>/</url-pattern>


</filter-mapping>


3. 创建文件上传表单

在`src/main/webapp/WEB-INF/pages`目录下创建一个名为`upload.jsp`的JSP文件,用于展示文件上传表单:

jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


<html>


<head>


<title>文件上传</title>


</head>


<body>


<form action="upload" method="post" enctype="multipart/form-data">


<input type="file" name="file" />


<input type="submit" value="上传" />


</form>


</body>


</html>


4. 创建文件上传Action

在`src/main/java/com/example`目录下创建一个名为`UploadAction.java`的类,实现文件上传功能:

java

package com.example;

import com.opensymphony.xwork2.ActionSupport;


import org.apache.commons.fileupload.FileItem;


import org.apache.commons.fileupload.disk.DiskFileItemFactory;


import org.apache.commons.fileupload.servlet.ServletFileUpload;

import javax.servlet.http.HttpServletRequest;


import java.io.File;


import java.io.FileOutputStream;


import java.io.IOException;


import java.util.List;

public class UploadAction extends ActionSupport {


private File file;


private String fileFileName;


private String fileContentType;

public String execute() throws Exception {


if (ServletFileUpload.isMultipartContent(getRequest())) {


DiskFileItemFactory factory = new DiskFileItemFactory();


ServletFileUpload upload = new ServletFileUpload(factory);


List<FileItem> items = upload.parseRequest(getRequest());


for (FileItem item : items) {


if (!item.isFormField()) {


String filePath = getServletContext().getRealPath("/") + "uploads/" + item.getName();


File saveFile = new File(filePath);


item.write(saveFile);


item.delete();


}


}


}


return SUCCESS;


}

public File getFile() {


return file;


}

public void setFile(File file) {


this.file = file;


}

public String getFileFileName() {


return fileFileName;


}

public void setFileFileName(String fileFileName) {


this.fileFileName = fileFileName;


}

public String getFileContentType() {


return fileContentType;


}

public void setFileContentType(String fileContentType) {


this.fileContentType = fileContentType;


}


}


5. 配置struts.xml

在`src/main/webapp/WEB-INF/struts.xml`文件中,配置文件上传Action:

xml

<struts>


<package name="default" extends="struts-default">


<action name="upload" class="com.example.UploadAction">


<result name="success">/success.jsp</result>


</action>


</package>


</struts>


6. 创建成功页面

在`src/main/webapp/WEB-INF/pages`目录下创建一个名为`success.jsp`的JSP文件,用于展示上传成功信息:

jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


<html>


<head>


<title>上传成功</title>


</head>


<body>


<h1>文件上传成功!</h1>


</body>


</html>


总结

本文详细介绍了使用Struts2实现JSP文件上传的方案。通过配置web.xml、创建文件上传表单、编写文件上传Action和配置struts.xml,我们可以轻松实现文件上传功能。在实际开发中,可以根据需求对文件上传功能进行扩展,如限制文件大小、文件类型等。希望本文对您有所帮助。