基于MVC模式SSH框架智能化养护专家系统文件上传与下载研究与实现

2014-05-09 08:26金小初
交通科技 2014年3期
关键词:对话框代码框架

金小初 杨 刚

(1.湖北省女子职业学校 武汉 430079; 2.武汉理工大学信息工程学院 武汉 430070)

高速公路智能化养护专家系统可实现数据自动转换、能根据自动检测结果和养护历史资料分析路面变化规律,预测养护实施的时间,分别提出不同病害的养护对策、养护方法和施工工艺,同时根据自动检测数据确定路面养护工程数量,输入各种材料和设备定额后确定养护工程造价,制定路面养护计划。系统功能见图1。

智能化养护专家系统中的网络业务对速度的要求比较高,因此对用户与数据库的交互也提出了较高要求,故不能像以前一样把所有数据和文件都存入数据库,这样会大大降低系统的读取速率。一个解决办法就是把大数据做成文件上传。网络最大的好处之一就是实现了资源的共享,文件的下载也成为重要的需求。高速公路智能化养护专家系统功能图见图1。

图1 高速公路智能化养护专家系统功能图

1 Struts+Spring+Hibernat框架技术

目前网络应用有很多开源的上传下载功能代码,基于SSH(Str uts+Spring+Hibernate)框架的上传下载比这些代码结构性更强,开发更快。

1.1 Struts+Spring+Hiber nat简介

Str uts作为表现层和控制层主要框架,提供MVC控制、表现层Taglib布局管理,以及Validator输入校验。Taglib是Str uts的标记库,有效提高了开发效率。同时,Str uts框架具有组件的模块化,其controller作为控制层只需要通过一个配置文件,就可以明晰整个系统各部分之间的联系,简化了系统的开发和维护[1]。

Spring中的Io C容器作为系统控制层的一部分提供面向接口编程的JavaBean的管理,通过消除各种自定义格式的属性文件来简化对JavaBean的管理,从而实现业务逻辑的方便更换,而无需使用EJB。并且,Spring能解决系统中常见的对Singleton的过多使用而导致降低系统的可测试性和面向对象的程度问题。数据访问层主要采用DAO(data access object)模式,将底层数据访问操作与高层的业务逻辑分离开来。通过DAO,向业务逻辑组件隐藏了数据库访问的实现细节。

Hiber nate作为数据访问层的底层持久框架,提供O/R Mapping,实现面向对象的域模型映射到传统的关系数据库。它不仅负责实现映射,提供数据查询和检索能力,而且还可以自动生成SQL,从而能使应用程序移植到所有的SQL数据库。通过4个层次的划分,使每个层次的逻辑集中,便于专注开发。而相邻层次之间松散耦合,便于组件的重用和系统功能扩展[2]。

1.2 Struts+Spring+Hiber nat结合的优点

Str uts+Spring+Hiber nate的整合架构设计采用分层的思想,并为各层次的支持提供一个整合框架的策略,以隔离各层次间的依赖性,便于系统扩充。

Str uts已经成为业界标准,其HT ML标签非常优秀的、惟一的公共控制器便于管理,但相对于处理界面的强大功能而言,Str uts处理业务逻辑方面要逊色得多,这些不足之处可由Spring得到解决。

Spring能有效地组织中间层对象,易于同其他View框架无缝集成,允许根据需要在某一层选择使用它的某一个模块,对不同的数据访问技术提供了统一的接口,并且采用Io C可以很容易地实现bean的装配,提供了简洁的AOP并据此实现事务管理,便于测试,但其Jsp中要写很多代码、控制器过于灵活,缺少一个公用控制器,这又可以由Str uts来弥补。

用Hiber nate实现数据的持久化能解决因底层的数据结构发生改变而导致应用发生改变这样的问题,同时又可以和多种Web服务器或应用服务器良好集成,如今已经支持几乎所有的流行的数据库服务器。并且由于Hiber nate使用了J2EE架构中JDBC,JTA,JNDI等技术,使得 Hiber nate可以方便地集成到J2EE应用服务器中去,为Java应用提供了一个易用的、高效率的轻量级对象关系映射框架[3]。

由此可见,Struts,Spring和Hibernate的集成能够扬长避短,使框架更加易用、高效,是非常有价值的。

2 应用实例

2.1 系统界面

图2是文件上传界面,输入必要信息,点击提交即可上传。

图2 上传界面

图3 是点下载后弹出的现在对话框。

图3 下载对话框

2.2 系统代码

2.2.1 文件上传代码

文件上传时,页面数据通过Upload For m接收,然后传递到文件上传程序中。其中Upload-For m对象中有文件、文件编号、上传地址、文件个数4个属性。此处文件上传分2步,先把文件相关信息写入数据库,然后把文本文件传到指定地址。

//获得表单对象

Upload For m upload For m = (Upload For m)f or m;

//获得上传文件个数Vint length=Integer.parseInt(upload For m.get Length());

//多文件上传

f or(int i=0;i<length;i++)

//获得第i个文件对象

For mFile myfile= upload For m.get Myfile(i);

//获得文件编号

String filenu m=upload For m.get Filenu m(i);

//获得文件备注

String fileremar k=upload For m.get Fileremar k(i);

//获得文件名称

String filename=myfile.get File Name();

//获得存储地址,文件将被存储到服务器下的file文件夹中

String real Path=request.get Session().get Servlet-Context().get Real Path("/files/");

String fileaddress=real Path+"/"+filename;

//数据入库,此处数据入库用到了Hiber nate持久化数据库对象

Wj wj=new Wj();

wj.set Wjb m(filenu m);

wj.set Wj mc(filename);

wj.set Ccdz(fileaddress);

wj.set Wjbz(fileremar k);

wj DAO.save(wj);

//文件上传

try{

Output Stream streamOut=new File Output Stream(fileaddress);

int bytes Read=0;

byte[]buffer=new byte[8192];

//利用缓存,边读边写 while((bytes Read=streamIn.read(buffer,0,8192))!=-1){

streamOut.write(buffer,0,bytes Read);}

streamOut.close();

streamIn.close();

myfile.destroy();}

catch(Exception ex){ex.print Stack Trace();}

中小企业成长的关键不是经济环境,也不是市场条件,而是企业自身的管理工作。中小企业无力聘请专业齐全的管理人员,要求经营者当“多面手”,而事实上多数经营者缺乏全面管理的能力,难免顾此失彼。建立健全的财务机构,并让各机构之间的权力形成相互制约、相互监督的关系,填补岗位空缺,制定完善的财务管理制度,将责任落实到每一位财务人员的身上,鼓励财务管理人员精通财务知识,大力提高财务人员的整体素质、执行能力和管理能力,建立严格的奖惩制度,让企业财务管控达到最优,根据企业财务状况制定更加完善的企业计划,为企业发展做出应有的贡献。

2.2.2 文件下载代码

文件下载程序也分两部分,第一部分实现点击下载按钮后弹出下载对话框,第二部分实现文件的读写。

//从页面获取下载文件的编号

String filenu m=request.get Para meter("filenu m");

//获得编号对应的文件对象

Wj wj=new Wj();

wj=wj DAO.find ById(filenum);

//获得文件存储地址

String path= wj.get Ccdz();

File download File=new File(path);

//获得文件名称

String f name=wj.get Wj mc();

try{

BufferedInput Stream bis=null;

Buffered Output Stream bos=null;

Output Stream fos=null;

Input Stream fis=null;

fis=new FileInput Stream(download File);

bis=new BufferedInput Stream(fis);

f os=response.get Output Stream();

bos=new Buffered Output Stream(f os);

int fileLength=fis.available();

//下面就是弹出下载对话框的关键代码

response.reset();

response.set Content Lengt h(fileLength);

response.set Content Type("application/x-msdownload;charset=GBK");

response.set Character Encoding("UTF-8");

f name=java.net.URLEncoder.encode(f name,"UTF-8");response.set Header("Content-Disposition","attach ment;filename="+new String(f name.get Bytes("UTF-8"),"GBK"));

//用输入流进行先读,然后用输出流去写

int bytes Read=0;

byte[]buffer= new byte[8192];

while((bytes Read= bis.read(buffer,0,8192))!= -1){

bos.write(buffer,0,bytes Read);}

bos.flush();

fis.close();

bis.close();

fos.close();

bos.close();}

catch(Exception ex){ex.print Stack Trace();}

3 结语

Str uts+Spring+Hiber na框架的文件上传时,Str uts配置文件中会有如下代码控制上传文件的大小,这里设置上传文件最大为500 M,如果不想规定最大文件,可将max FileSize设为-1。如果文件大小超过规定会报错。

<contr oller max FileSize="500 M"input-For war d="tr ue"/>

上传和下载文件都运用了缓存,这是为了防止内存溢出而发生错误。

本文对文件上传和下载的应用进行了研究并得以实现。实际应用时在文件上传中还可加入进度条,使得文件上传更加人性化。此技术成功应用于湖北省高速公路实业开发有限公司共同研制的高速公路智能化养护专家系统,取得预期效果。

[1] 梁立新.项目实践精解:基于 Str uts-Spring-Hibernate的Java应用开发[M].北京:电子工业出版社,2006.

[2] 邬继成.Str uts与 Hiber nate实用教程-构建基于MVC模式的高效Java Web应用[M].北京:电子工业出版社,2006.

[3] 梅登华,闵华清.基于STRUTS框架的SRM系统设计[J].计算机工程,2006(17):262-264.

猜你喜欢
对话框代码框架
框架
广义框架的不相交性
正常恢复虚拟机
Bootlace Worms’Secret etc.
What Is Beauty?
创世代码
创世代码
创世代码
创世代码
浅谈VB的通用对话框《CommonDialog》控件的使用