Struts2的文件上传

本文详细介绍了如何使用Struts2框架进行单文件上传的步骤,包括创建Web项目、配置Struts2核心过滤器、编写JSP表单、实现上传Action以及配置结果页面和struts.xml文件。通过这个实战,读者可以理解Struts2文件上传的基本流程和关键代码实现。
摘要由CSDN通过智能技术生成

文件上传的概述:文件上传是将本地文件上传到服务器的指定目录下。要使用Struts2进行文件上传,首先将form表单的enctype属性值设置为multipart/form-data。文件上传还需要用到<s:file>标签,该标签是一个表单标签,要放在<s:form>标签中。

 

实战(单文件上传)

(1)在eclipse中创建Web项FileUp,添加相应的JAR包和web.xml文件,并在web.xml文件中配置好Struts2的核心过滤器。

(2)新建上传单个文件的JSP页面fileUpload.jsp,在页面中创建form表单,并修改form表单中的enctype属性值为“multipart/form-data”,同时设置method属性值为“post”。

fileUpload.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传页面</title>
</head>
<body>                                    
<s:form action="fileUpload" method="post" enctype="multipart/form-data" >
  <s:file name="file" label="上传文件"/>
  <s:submit value="上传"/>
  <s:reset value="重置"/>
</s:form>

</body>
</html>

(3)在src目录下新建cn.itcast.action包,在此包中建立FileUploadAction.java文件。此文件用来接收上传的文件,在执行方法中,完成文件上传功能,

FileUploadAction.java

package cn.itcast.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport{
	private static final long serialVersionUID=1;
	//提交过来的文件
	private File file;
	//提交过来的file名字
	private String fileFileName;
	//提交过来的file类型
	private String fileContentType;
	public File getFile() {
		return file;
	}
        //三个属性的getter和setter方法
	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;
	}
	
	
	public String execute() throws Exception{
		//文件输入流
		InputStream is=new FileInputStream(file);
		//设置文件保存目录
		String uploadPath=ServletActionContext.getServletContext()
				.getRealPath("/upload");
		//设置目标文件
		
		System.out.println("路径为:"+uploadPath);
		
		File toFile=new File(uploadPath,this.getFileFileName());
		//文件输出流
		
		
		OutputStream os=new FileOutputStream(toFile);
		byte[] buffer=new byte[1024];
		@SuppressWarnings("unused")
		int length=0;
		//读取file文件输出到toFile文件中
		while (-1 !=(length=is.read(buffer,0,buffer.length))) {
			os.write(buffer);
			
		}
		
		//关闭输入流和输出流
		is.close();
		os.close();		
		return SUCCESS;
		
	}
	

}

三个属性,分别包括file、fileFileName、fileContentType,file属性的名称与表单中文本域的参数必须相同 其类型为File,它用来保存封装的上传文件。一般来说,Action中的属性与表单中提交的参数是相对应的,但在此表单中并没用提交fileFileName和fileContentType这连个参数,因为这两个参数是由FileUploadIntercepter(文件上传拦截器)来负责填充的,由FileUploadIntercepter对其属性值进行设置。fileFileName属性用来保存上传文件的名称,fileContentType用来保存上传文件的类型。在execute()方法中通过输入流来读取File文件中的数据,通过取得上传文件名和上传目录,构造了一个目标文件,并通过循环输出流将数据写到目标文件中,最后关闭输入输出流。

(4)新建上传结果页面result.jsp,此文件用来显示上传结果,包括文件名和类型

result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>result</title>
</head>
<body>
文件上传成功!<br>
上传文件名:${fileFileName}<br>
上传文件类型:${fileContentType}
</body>
</html>

(5)配置struts.xml文件,在package节点下添加一个action节点,在action节点中配置文件上传控制器对应的视图文件

struts.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="struts2"  extends="struts-default" namespace="/">
	
	
	<action name="fileUpload" class="cn.itcast.action.FileUploadAction">
	<result name="success">/result.jsp</result>
	</action>
	
	
	
	</package>
</struts>

(6)部署项目,在浏览器中输入http://localhost:8080/FileUp/fileUpload.jsp

如果不知道文件路径,可以通过控制台输出,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Keep Doing this

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值