科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Struts Hibernate简化J2EE的文件操作

Struts Hibernate简化J2EE的文件操作

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文讲解如何通过Struts Hibernate来上载文件并把它们存储到数据库中,同时,提供了功能性的、易于理解的代码。供大家参考!

作者:朱先忠编译 来源:天极网  2007年9月6日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

你可能对在BLOB中存储大型文件非常谨慎,但是请放心使用,MYSQL提供了这样的灵活性!最大包的大小可容易地通过文件my.ini中的适当行进行设置。例如:

set-variable = max_allowed_packet=10M

你能指定几乎任何你需要的大小。默认是1M。

现在,在Hibernate和WebLogic之间还存在一个问题。根据Hibernate的文档,Hibernate3.0使用ANTLR作为它的新的查询分析器。这真是个遗憾!但是BEA Weblogic在系统类路径中包括了ANTLR的一个版本,它在任何应用程序库装入前就已经被加载了。因为Weblog似乎不支持属性类装载器隔离,在应用程序的上下文中它是不会看到该Hibernate类的。BEA好象在包名前加上前缀来解决这个问题,但是现已发布的ANTLR并没有这个前缀。

这个问题的解决办法是,把所有的Hibernate和依赖库放到你的CLASSPATH中。就象如下这样:

C:\green\te3>echo %CLASSPATH%.jar;

C:\mysql-connector-java-3.1.7\mysql-connector-java-3.1.7-bin.jar;

C:\hibernate-3.0\hibernate3.jar;

C:\hibernate-3.0\lib\ehcache-1.1.jar;C:\hibernate-3.0\lib\jta.jar;

C:\hibernate-3.0\lib\xml-apis.jar;

C:\hibernate-3.0\lib\commons-logging-1.0.4.jar;

C:\hibernate-3.0\lib\dom4j-1.5.2.jar;

C:\hibernate-3.0\lib\antlr-2.7.4.jar;

C:\hibernate-3.0\lib\cglib-full-2.0.2.jar;

C:\hibernate-3.0\lib\jdbc2_0-stdext.jar;

C:\hibernate-3.0\lib\xerces-2.6.2.jar;

C:\hibernate-3.0\lib\jaxen-1.1-beta-4.jar;

C:\hibernate-3.0\lib\commons-collections-2.1.1.jar;

C:\hibernate-3.0\lib\log4j-1.2.9.jar;

现在,unzip源代码到任何你想要的目录下。用你喜欢的文件编辑器打开build.xml文件,并检查(如果必要的话,加以改变)前面涉及你的HOME目录的几行和你的域的标题。保存你的变化并输入:

ant

当工程建构完成时,你就会得到一个文件TE3.EAR,这是一个准备好等待发布的包(名字TE3仅是个普通名字)。然后,你就可以用WebLogic的管理控制台发布它,当发布后,用你的浏览器http://localhost:7001/te3/打开它。之后,你将看到两个选项:"upload file"和"list all files"

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几乎为你做了一切事情-而需要你做的仅仅是极少的几个步骤。

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

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    闂侇収鍠曞▎銏㈡媼閵忋倖顫�

    濠碘€冲€归悘澶愬箖閵娾晜濮滈悽顖涚摃閹烩晠宕氶崶鈺傜暠闁诡垰鍘栫花锛勬喆椤ゅ弧濡澘妫楅悡娆撳嫉閳ь剟寮0渚€鐛撻柛婵呮缁楀矂骞庨埀顒勫嫉椤栨瑤绻嗛柟顓у灲缁辨繈鏌囬敐鍕杽閻犱降鍨藉Σ鍕嚊閹跺鈧﹦绱旈幋鐐参楅柡鍫灦閸嬫牗绂掔捄铏规闁哄嫷鍨遍崑宥夋儍閸曨剚浠樺ù锝嗗▕閳ь剚鏌ㄧ欢鐐寸▕鐎b晝顏遍柕鍡嫹

    重磅专题
    往期文章
    最新文章