Struts标签库中的文件上传标签(<html:file>)的使用,利用<html:file>实现文件上传一般分为四步:
第一步:
编写JSP页面,在页面中使用struts标签库提供的标签,至少FORM表单组件相关的标签要使用struts提供的。
示例:
JSP页面中的FORM表单块.
<html:form action="upload.do" method="post" enctype="multipart/form-data">
<table border="0">
<tr>
<td>文件上传:</td>
<td><html:file property="myFile" /></td>
</tr>
<tr>
</tr>
<tr>
<td colspan="2" align="center"><html:submit value="上传"/></td>
</tr>
</table>
</html:form>
其中需要注意的:
1.<html:form>中的属性enctype="multipart/form-data"是不可少的。
为什么是必须呢?
表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,设置enctype="multipart/form-data"是上传二进制数据。
2.这里使用到的是struts标签库是“struts-html.tld”,所以在JSP页面中需要导入。
完成了JSP页面的编写后,开始第二步。
第二步:
编写ActionForm。
示例:
继承了ActionForm的Java类.
public class UploadForm extends ActionForm {
private FormFile myFile;
public FormFile getMyFile() {
return myFile;
}
public void setMyFile(FormFile myFile) {
this.myFile = myFile;
}
}
当中提供了一个org.apache.struts.upload.FormFile类型的变量----myFile。
注意这里的myFile命名一般不要随便命名,它一般和上传组件<html:file>的属性property的值保持一致(如果不是一样,那么这里提供的set方法就必须与property值保持“一致”,这里所谓的一致就是说property值与ActionForm提供的get和set方法放在一起一定要满足javabean中的get和set方法的命名规范)。
ActionForm编写完成后,就可以开始第三步了。
第三步:
编写Action。
public class UploadAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
UploadForm uf = (UploadForm) form;
//得到FormFile对象,这个对象把要上传的文件封装成了流的形式,
//并且当中还封装了上传文件的一些信息,如文件名字等等。
FormFile myFile = uf.getMyFile();
InputStream in = null;
OutputStream out = null;
try {
//得到上传文件的流,可以通过这个流读取上传文件
in = myFile.getInputStream();
//得到服务器的保存图片的路径
String path = this.servlet.getServletContext().getRealPath(
"/upload");
//得到上传文件的名字
String fileName = myFile.getFileName();
out = new FileOutputStream(path + "/" + fileName);
byte[] b = new byte[1024];
int length = 0;
//开始上传文件,每读取1024个字节,就向服务器指定路径位置写入读取到的字节。
while ((length = in.read(b)) != -1) {
out.write(b, 0, length);
out.flush();
}
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
//关闭流
in.close();
out.close();
}
return mapping.findForward("success");
}
}
Action编写完成就只差最后一步。
第四步:
配置struts-config.xml文件。
<form-beans>
<form-bean name="uploadForm" type="com.lovo.struts.form.UploadForm"></form-bean>
</form-beans>
<action-mappings>
<action path="/upload" name="uploadForm" type="com.lovo.struts.action.UploadAction">
<forward name="success" path="/success.jsp"></forward>
</action>
</action-mappings>
做到这里就大功告成了,这样一来上传文件就变得如此的简单。
分享到:
相关推荐
struts2 <s:if>标签使用struts2 <s:if>标签使用struts2 <s:if>标签使用struts2 <s:if>标签使用struts2 <s:if>标签使用struts2 <s:if>标签使用
关于STRUTS标签的一些详细说明。 如:<html:form>的说明。
<td> <s:set name="actorRef" value="actorId" /> <s:set name="taskName" value="name" /> <s:if test="#actorRef=='' or #actorRef==null">共享任务(<a href="${pageContext.request.contextPath}/ga/...
NULL 博文链接:https://z18022893621.iteye.com/blog/1956098
在action里面写了方法获取一个list,再将这个list的值放到jsp页面中显示出来,用的是<s:iterator>标签。
<s:if> 在进行字符创和字符比较时,会忽略一些细节,对于对该控件不是经常使用的,需要注意与字符和字符串的比较的区别
struts2 OGNL之<s:property>标签访问值栈(value stack)用法,希望能对大家有帮助
<%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-----超链接,类似于html里的<a></a> 3. <s:...
struts-1.3.8 包(<br><br>antlr-2.7.2.jar<br>bsf-2.3.0.jar<br>commons-beanutils-1.7.0.jar<br>commons-chain-1.1.jar<br>commons-digester-1.8.jar<br>commons-fileupload-1.1.1.jar<br>commons-io-1.1.jar<br>...
1. Map里存放的是bean时<br><br><logic:iterate id="destMap" name="srcMap"><br><br> <bean:define id="bean" name="destMap" property="value" /><br><br> <bean:write name="bean" property="name" /><br><br></...
struts2文件上传与下载, <s:form name="Myform" action="/fileManage/upload" method="post" enctype="multipart/form-data" theme="simple" > <s:fielderror></s:fielderror> <s:file name="image" label=...
<%@ taglib uri="/struts-tags" prefix="s" %> 结合例子,重点掌握以下标签的用法 (1) <s:property> (2) <s:set> (3) <s:if> 、<s:elseif>、<s:else> (4) <s:iterator> (5) <s:include> (6) <s:form>、<s:hidden> (7...
<%@ taglib uri="/struts-tags" prefix="s" %> 结合例子,重点掌握以下标签的用法 (1) <s:property> (2) <s:set> (3) <s:if> 、<s:elseif>、<s:else> (4) <s:iterator> (5) <s:include> (6) <s:form>、<s:hidden> (7...
1. 导入的包<br><br>l struts2的五个基础包:commons-logging-1.1.jar;<br><br>freemarker-2.3.8.jar;<br><br>ognl-2.6.9.jar;<br><br>struts-core-2.0.6.jar;<br><br>xwork-2.0.0.jar.<br><br>l spring的核心包:...
<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> 修改struts默认的拦截: <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*....
struts.jar<br>spring-web.jar<br>spring-webmvc.jar<br>spring-portlet.jar<br>struts.jar<br>commons-fileupload.jar<br>commons-httpclient.jar<br>freemarker.jar<br>jasperreports-1.3.3.jar<br>commons-io.jar...
例1: 生成一个简单的iterator,并且使用iterator标签打印出内容。 <s:generator val="%{'aaa,bbb,ccc,ddd,eee'}"> <s:iterator> <s:property /><br/> </s:iterator> </s:generator> 例2: 生成一个iterator,...
springetc.rar<br>包含如下包:<br>saaj.jar<br>serializer-2.7.0.jar<br>servlet.jar<br>servlet-api.jar<br>slf4j-api-1.3.1.jar<br>slf4j-simple-1.3.1.jar<br>smtp.jar<br>soap.jar<br>spring.jar<br>spring-mock...
<form name="form1" action="login.do" method="post"> <table width="300" border="1"> <tr> <td colspan="2"><bean:message key=...<html:errors property="org.apache.struts.action.GLOBAL_MESSAGE" /></form>