之前我们可能使用过文件上传组件进行开发系统中文件上传的功能,但在Struts2 中为我们提供了更为简单易用的上传功能,当然虽然易用,但其实际不是对底层文件IO和HTTP的封装。下面我们介绍一下,如何在Struts2 中使用文件上传的功能。
我们知识Strust2中大部分的功能都是通过拦截器实现的,当然,这里的文件上传也不例外。同样也是也采用拦截器来支持的。
下面以例子来看一下如何使用strsut2 实现文件上传:
1. 在myeclipse 下创建一个strust2 web 工程,正常配置struts.xml。
2. 在web目录下面创建一个upload.jsp 页面,做为页面上传的界面,代码如下:
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>register page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<script type="text/javascript">
function addMore(){
var td=document.getElementById("more");
var br=document.createElement("br");
var input=document.createElement("input");
var button=document.createElement("input");
input.type="file";
input.name="file";
button.type="button";
button.value="remove";
button.onclick=function(){
td.removeChild(br);
td.removeChild(input);
td.removeChild(button);
}
td.appendChild(br);
td.appendChild(input);
td.appendChild(button);
}
</script>
</head>
<body>
<br>
<s:fielderror />
<s:form action="upload" theme="simple" enctype="multipart/form-data" >
<table border="1" width="500">
<tr>
<td colspan="2">文件上传</td>
</tr>
<tr>
<td>username</td>
<td><s:textfield name="username"/></td>
</tr>
<tr>
<td>password</td>
<td><s:password name="password" id="password"/></td>
</tr>
<tr>
<td>file1</td>
<td id="more"><s:file name="file" id="file"/><input type="button" onclick="addMore()" value="添加..."/></td>
</tr>
<tr>
<td></td>
<td><s:submit name="submit"/></td>
</tr>
</table>
</s:form>
</body>
</html>
界面显示如下:
该例子是一个用户可以指定上传文件个数进行上伟的例子,单击添加按钮可以新增上传控制,这个通过javascript 脚本实现的。注意添加的组件的名字都是file,这样上传的文件会传到Action中的一个