科技时代新浪首页 > 科技时代 > 学园 > 正文

Struts+Hibernate简化J2EE的文件操作(3)


http://www.sina.com.cn 2005年09月20日 10:36 天极yesky

  文/朱先忠编译

    5. 代码分析

  现在,你已经看到了一切是如何工作的,下面解释一下几个更为重要的代码片断。如前述,UploadFileAction.java使用DynaActionForm来保持HTML表单的属性。下面是它在/WEB-INF/struts-config.xml文件中的定义:

...
<form-beans>
 <form-bean name="uploadFileForm" type="org.apache.struts.action.DynaActionForm" dynamic="true">
  <form-property name="myFile" type="org.apache.struts.upload.FormFile"/>
  <form-property name="myName" type="java.lang.String"/>
 </form-bean>
</form-beans>
...
<action-mappings>
<action path="/UploadFile" type="com.prokhorenko.web.UploadFileAction" name="uploadFileForm">
...

  下面的代码教你怎样通过属性存取来"存储"一个上传的文件:

...
User per = new User();
DynaActionForm df = (DynaActionForm) form;
FormFile myFile = (FormFile) df.get("myFile");
...
per.setFilebin ( Hibernate.createBlob (myFile.getInputStream()) );
...

  Hibernate.createBlob(...)返回初始的不变的java.sql.Blob对象并使用它,因为为了设置User实体的filebin属性,该属性被定义并被映射为java.sql.Blob。

  接下去一段有趣的代码来自于DownloadFileAction.java,它用’id’加载该User实体:

...
User per = bd.getUser( new Long((String)request.getParameter("id")) );
...

  下一步,你就需要设置响应的头部,并开始把Blob型字段filebin的内容写到ServletOutputStream中:

...
ServletOutputStream outStream = response.getOutputStream();
InputStream in = per.getFilebin().getBinaryStream();
byte[] buffer = new byte[32768];
int n = 0;
while ( ( n = in.read(buffer)) != -1) {
 outStream.write(buffer, 0, n);
}
in.close();
outStream.flush();
...

  6. 最容易的解决方案

  在所有官方档案中,Hibernate 3.0都包装了Blob和Clob的实例,这样以来就允许具有类型Blob或Clob的属性的类可以被分离、串行化、反串行化以及被传递而实现合并的目的。因此,你会看到,Struts和Hibernate几乎为你做了一切事情-而需要你做的仅仅是极少的几个步骤。

  现在看来,上载文件并把它们存储到数据库中已不再是象以前那样是一项繁重的任务。你只需选择正确的工具并知道如何灵活地使用它们即可!

[上一页] [1] [2] [3]

发表评论

爱问(iAsk.com)



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5828   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2005 SINA Inc. All Rights Reserved

版权所有 新浪网