### Struts2 文件上传知识点详解 #### 一、Struts2框架简介 Struts2是Apache Struts的一个后续版本,它是一个开源的Web应用程序框架,主要用于Java开发环境中创建企业级应用。Struits2继承了Struts 1.x的许多优点,并在很多方面进行了改进和增强。其中,文件上传功能是Struts2中的一个重要特性。 #### 二、Struts2文件上传的基本原理 在Struts2中实现文件上传主要依赖于以下几点: 1. **表单编码方式**:需要设置表单的`enctype`属性为`multipart/form-data`。 2. **处理Action**:需要定义一个能够接收文件对象的Action类。 3. **文件存储**:文件通常会被临时保存在服务器端,之后进行进一步处理或移动到指定位置。 #### 三、Struts2文件上传的关键代码解析 ##### 1. 表单设计 ```html <form action="upload.action" method="post" enctype="multipart/form-data"> 标题:<input type="text" name="title"/><br> 选择文件:<input type="file" name="upload"/><br> <input value="上传" type="submit"/> </form> ``` 这段代码展示了一个基本的文件上传表单。关键点包括: - `enctype="multipart/form-data"`:此属性指定了表单数据的编码方式,对于文件上传来说非常重要。 - `action="upload.action"`:指定了处理上传请求的Action类路径。 - `<input type="file" name="upload">`:用于选择文件并指定文件字段名。 ##### 2. Action类设计 ```java public class UploadAction extends ActionSupport { // 文件标题 private String title; // 上传文件 private File upload; // 上传文件类型 private String uploadContentType; // 上传文件名称 private String uploadFileName; // 文件保存路径 private String savePath; // setter 和 getter 方法省略 @Override public String execute() throws Exception { // 获取文件保存路径 String realPath = getSavePath(); // 创建文件输出流 FileOutputStream fos = new FileOutputStream(realPath + "\\" + getUploadFileName()); // 创建文件输入流 FileInputStream fis = new FileInputStream(getUpload()); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } return SUCCESS; } } ``` 关键点包括: - **属性定义**:定义了标题、文件对象、文件类型、文件名称等属性。 - **setter 和 getter 方法**:这些方法用于Struts2框架自动填充属性值。 - **execute方法**:这是Action类的核心方法,负责处理具体的业务逻辑。在这个例子中,主要实现了读取文件、写入文件的功能。 #### 四、Struts2文件上传注意事项 1. **表单编码**:确保表单的`enctype`属性正确设置为`multipart/form-data`。 2. **文件大小限制**:服务器端和客户端都可能有文件大小限制,默认情况下Struts2没有对上传文件的大小进行限制,但可以通过配置文件进行设置。 3. **安全性**:注意防止恶意文件上传攻击,如XSS攻击、SQL注入等。 4. **文件类型检查**:根据业务需求,可以添加文件类型检查机制,避免不合规文件的上传。 5. **错误处理**:合理处理文件上传过程中的异常情况,如文件不存在、文件大小超出限制等。 通过以上分析可以看出,Struts2文件上传功能不仅强大而且灵活,开发者可以根据实际需求进行定制化开发。
<html xmlns=" http://www.w3.org/1999/xhtml";>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK" />
<title>简单的文件上传</title>
</head>
<body>
<!-- 为了完成文件上传,设置该表单的enctype属性为multipart/form-data。 -->
<form action="upload.action" method="post" enctype="multipart/form-data">
文件标题:<input type="text" name="title" /><br>
选择文件:<input type="file" name="upload" /><br>
<input value="上传" type="submit" />
</form>
</body>
</html>
Struts2的Action无需负责处理HttpServletRequest请求,正如前面介绍的,Struts2的Action已经与Servlet API彻底分离了,Struts2框架负责解析HttpServletRequest请求中的参数,包括文件域。Struts2使用File类型来封装文件域,下面是处理上传请求的Action类代码。
public class UploadAction extends ActionSupport
{
//封装文件标题请求参数的属性
private String title;
//封装上传文件域的属性
private File upload;
//封装上传文件类型的属性
private String uploadContentType;
//封装上传文件名的属性
private String uploadFileName;
//接受依赖注入的属性
private String savePath;
//接受依赖注入的方法
剩余11页未读,继续阅读
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- GEE错误集-Cannot add an object of type <Element> to the map. Might be fixable with an explicit .pdf
- 矩阵与线程的对应关系图
- 人体人员检测46-YOLO(v5至v9)、COCO、Darknet、TFRecord数据集合集.rar
- GEMM优化代码实现1
- 资料阅读器(先下载解压) 5.0.zip
- 人、垃圾、非垃圾检测18-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- java实现的冒泡排序 含代码说明和示例.docx
- 440379878861684smart-parking.zip
- 金智维RPA server安装包
- 二维码图形检测6-YOLO(v5至v9)、COCO、CreateML、Darknet、Paligemma、TFRecord数据集合集.rar