Struts2实现图片上传教程
4星 · 超过85%的资源 需积分: 9 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中上传图片文件的基本流程,包括前端表单、后端处理和配置文件的设置。实际应用中,你可能还需要考虑错误处理、文件大小限制、文件类型的检查等安全问题。
2015-12-14 上传
139 浏览量
2009-06-15 上传
2014-12-03 上传
2011-04-23 上传
2012-03-27 上传
2010-10-21 上传
2008-12-22 上传
2015-01-25 上传
howard2005
- 粉丝: 1w+
- 资源: 20
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫