COPY兄弟博客
http://12345678.iteye.com/blog/713954
引用
Struts标签库中的文件上传标签(<html:file>)的使用,利用<html:file>实现文件上传一般分为四步:
第一步:
编写JSP页面,在页面中使用struts标签库提供的标签,至少FORM表单组件相关的标签要使用struts提供的。
示例:
JSP页面中的FORM表单块.
Jsp代码
<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>
<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类.
Java代码
public class UploadForm extends ActionForm {
private FormFile myFile;
public FormFile getMyFile() {
return myFile;
}
public void setMyFile(FormFile myFile) {
this.myFile = myFile;
}
}
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。
Java代码
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");
}
}
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文件。
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>
<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 是一款基于 Java 的企业级 Web 应用框架,它利用了 MVC(Model-View-Controller)架构模式来帮助开发者构建可扩展、易于维护的 Web 应用程序。在 Struts2 中...
关于STRUTS标签的一些详细说明。 如:<html:form>的说明。
一旦Action处理完数据,我们可以使用`<s:iterator>`标签在JSP中遍历并展示这些集合。例如: ```jsp <s:iterator value="list"> <p><s:property value="this"/></p> </s:iterator> <s:iterator value="set"> ...
1. **基本HTML元素标签**:这些标签用于生成常见的HTML元素,如`<html>`、`<base>`和`<img>`。例如,`<html:html>`标签可以设置HTML文档的语言环境,而`<html:base>`则可以设置页面的基础URL。`<html:img>`用于插入...
与HTML的`<form>`标签不同,`<html:form>`的`action`属性需要指定一个Struts的动作(Action),这个动作必须在`struts-config.xml`配置文件中定义。否则,页面在尝试提交时会抛出异常,导致JSP页面无法正常工作。...
<s:file tooltip="UploadYourPicture" label="图片" name="picture"/> ``` #### 三、非表单UI标签 非表单UI标签主要用于实现一些非表单相关的功能,例如条件判断、循环迭代等。 1. **If/ElseIf/Else标签** - ...
<title>Struts1.x Login Form</title> </head> <body> <s:form action="login"> <s:textfield name="username" label="用户名" /> <s:textfield name="password" label="密码" type="password" /> <s:submit ...
- 使用Struts标签时,需要在JSP页面中引入对应的标签库,例如`<%@ taglib prefix="html" uri="/tags/html" %>`。 - 每个标签都有其特定的属性,正确设置这些属性才能确保标签正常工作。 - 在处理表单时,Struts会...
<constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <action name="helloworld" class="com.mytest.HelloWorldAction"> <result> /result....
1. **ActionForm标签**:这些标签用于与ActionForm对象交互,如`<html:form>`用于创建表单,`<html:text>`、`<html:password>`等则用于创建表单字段,与ActionForm的属性绑定。 2. **Bean标签**:Bean标签库用于...
此外,`<html:checkbox>`和`<html:radio>`用于创建复选框和单选按钮,而`<html:file>`则用于处理文件上传。`<html:select>`配合`<html:option>`用于创建下拉列表。 Bean标签库则是为了方便访问和操作JavaBean中的...
3. Struts1:Struts是一个基于MVC(Model-View-Controller)设计模式的Java Web框架。Struts1的标签库包括逻辑标签(如<logic:iterate>、<logic:equal>)、HTML标签(如<html:form>、<html:text>)和bean标签(如...
1. **配置文件**:在struts.xml中,你需要为每个Action定义一个对应的Action类和结果。如果使用`<jsp:forward/>`,则需要在Result类型中指定为`dispatcher`,并设置目标页面的路径。例如: ```xml <action name=...
例如,使用`<html:form>`标签创建表单,结合`<html:submit>`和`<html:reset>`按钮;通过`<bean:write>`显示JavaBean的属性;利用`<logic:iterate>`遍历集合并显示数据;使用`<tiles:insert>`组织页面结构。同时,...
- `<s:include>`:包含其他JSP或Struts标签页。 2. **表单标签库**: - `<s:form>`:创建HTML表单,自动绑定到Action类的属性。 - `<s:textfield>`:创建文本输入框,关联Action的属性。 - `<s:textarea>`:...
例如,`<html:form>`标签用于创建表单,`<html:text>`、`<html:hidden>`、`<html:textarea>`、`<html:radio>`、`<html:checkbox>`、`<html:submit>`和`<html:reset>`分别用于创建文本输入框、隐藏输入、文本区域、...
- `<s:file>` 标签用于处理文件上传,与Struts2的文件上传功能结合使用。 - `<s:form>` 创建表单,可以指定Action,收集用户输入的数据。 G. `<s:generator>` 和 `<s:iterator>`: - `<s:generator>` 通常与`s:...
1. `<html:text>`和`<html:textarea>`:用于创建文本输入和文本区域。它们的`name`属性对应ActionForm Bean的名称,`property`属性则表示表单数据要映射到Bean的属性。 2. `<html:checkbox>`和`<html:multibox>`:...
1. `<html:html>`标签:这是Struts HTML标签库的基础,它可以设置`locale`属性,用于处理国际化,如果未指定`locale`对象,系统会从请求头的`accept-language`中获取。此外,还可以设置`lang`属性,替代Struts 1.2...