admin 管理员组文章数量: 1184232
2024年3月28日发(作者:access中医药数据库下载)
维普资讯
计算机与现代化
2007年第11期
JISUANJI YU XIANDAIHUA 总第147期
文章编号:1006-2475(2007)11-0135-03
Struts+Hibernate下实现Excel文件的导人导出
杨勇虎,汤德俊
(东北大学东软信息学院,辽宁大连116023)
摘要:在软件开发中Excel文件的导入导出功能是经常遇到的一种需求,例如:导入由Excel保存的原始数据,利用Excel
打印等。本文介绍了在Struts+Hibernate的框架下实现此功能的方法和实现过程。利用框架式的方法实现,不仅可以有
很好的封装性,而且有很好的日志处理方法。
关键词:Excel;导入导出;Struts+Hibernate;架构
中图分类号:TP311 ・文献标识码:A
Rendition of lmpo ̄atxi Exporting Excel File Based on F ̄mework of Struts&Hibernate
YANG Yong—hu,TANG De-jun
(Neusfot Institute of Information,Dalian 116023,China)
Abstract:Importing and exporting Excel file is often required in the development of software,for example,importing the original
data saved by Excel,printing the data by using Excel,and SO on.The paper proposes a method and a process of eralization based
on the framework of Strusts&Hibernate.The method not only has a good encapsulation,but also has a good log.
Key words:Excel;importing&exporting;Struts+Hibernate;framework
0 引 言 1 Excel文件导入功能分析及实现
目前进行软件开发中,很多的业务需求都涉及到
Struts由ActionServlet、Action、FormBean、Action—
与Excel数据的交互,例如:有很多原始数据是以Excel
Mapping、ActionForward、ActionError和Struts标记库
文件的形式存储的,需要导人到数据库中,相应在Web
等基本组件组成。借助于这些组件实现Excel文件
页中应该具有导人的功能。另一方面,众所周知,Web
上传,各组件间协作机制和实现过程为:
上的打印是比较困难的,常见的Web上打印的方法大
Step 1 ActionServlet接收来自客户端的H1-rP文
概有三种:(1)直接利用IE的打印功能。一般来说,这
件上传请求(通常为,一c.do请求),在视图Web页中
种方法可以做些扩展,而不是单单地调用javascript:
加入文件控件,核心代码为:
print()这样简单,在这里不再叙述。这种方法可以适
<html:form action=”/InputStuScoreAction.do”enctype
用于简单的数据打印,对系统要求不高,但不足之处在
=
”multipart/form-data”>
于可以控制的能力比较差,比如处理分页等问题。(2)
<td>文件位置:</td>
利用水晶报表或其他第三方工具,如微软的Reporting
<td><html:file property!”thaFila”/></td>
<td>
service。水晶报表或其他第三方控件的打印,一般是
<html:submit property=”method”>
导出到Excel,Word,PDF等再进行打印的,效果比较
<bean:message key ”StuScore.inputScore”/>
好,但编程比较复杂,控制起来也不大方便,而且这些
</html:submit>
工具都是要收费的。(3)将数据库的数据或要打印的
</td>
内容导出到Excel,Word中去打印。使用这种方法,适
</html:form>
应性比较强,控制较好。本文将介绍如何在Structs+
Step 2针对此请求调用配置文件struts—conilg.
Hibernate架构上使用Excel o
xml中的ActionMapping类得到Action对象。在配置
收稿日期:2006.10—16
作者简介:杨勇虎(1977.),男,内蒙古集宁人,东北大学东软信息学院讲师,工程师,硕士,研究方向;信息管理和决策支持系
统;汤德俊(1978-),男,安徽人,讲师,工程师,硕士,研究方向:算法设计与分析。
维普资讯
136 计算机与现代化 2007年第11期
文件structs—config.xml中,具体的FormBean和Ac—
tionMapping为:
<form-bean nanle=”InputStuSeoreForm”
type=”student。manage.aetionform.InputStuScoreForm”/>
<action path=”/InputStuSeoreAction”
name=”InputStuScoreForm”
type=”student.manage.action。InputStuSeoreAetion”
input=”/jsp/studentZmanage/inputStuScore。jsp”
parameter=”method”scope:”request”>
<forward name=”success”path=”/PreInputStuSeoreAe-
tion。do”/>
</action>
Step 3 Action调用ActionMapping映射表中的方
法得到FormBean对象,FormBean对象负责接收一些
文件上传的信息。建立一个InputStuSeoreForm.java
类用来保存请求的参数,其中该文件中的变量名称要
与HTTP请求参数中的名称一致,使用get和set方法
得到文件上传的参数,该类用于获得Web中要上传
的文件,导人org。apache.struts.upload.FormFile类。
Step 4将FormBean中的上传文件的基本参数传递
给对象Action中的doinput()方法,该方法是LookupDis—
patehAetion类中分发的—个业务方法。核心代码为:
public class LookForlnputStuSeoreAction extends LookupDis・
patehAetion{
protected Map getKeyMethodMap(){
Map map new HashMap();
map。put(”StuScore。inputScore”,”dolnput”);
erturn map;
}
public AetionForward dolnput(AetionMapping mapping,Ac-
tionForm form,
HttpServletRequest request,
HttpServletResponse response){
InputStuSeoreForm theForm=(InputStuSeoreForm)form;
FormFile file=theFomr.getTheFile();
Stirng ifleName=file.getFileName();
try{
InputSteram steram=file.getlnputStream();
CSVReader csvreader=new CSVReader(stream);
List list=csvreader.getList();
Iterator it=null;
if(1ist!=nul1){
StuSeoreCtrl stuScoreCtlf=new StuSeoreCtrl();
stuSeoreCir1.inputSeore(1ist);
request.setAttribute(”SUCCESS”,”1”);
}
steram.close();
}catch(…){
…
}
file。destroy();
erturn mapping.ifndForward(“SUCCESS“);
}
}
Step 5在doinput方法中调用一个自定义的类
CSVReader,该类主要进行Excel文件的解析,并返回
一
个List对象,用来存储Excel文件的解析结果。具
体核心代码为:
public class CSVReader extends BufferedReader{
private boolean IIIing true;
ArrayList biglist=new ArrayList();
public CSVReader(InputStream inputStream){
super(new InputStreamReader(inputStream));
}
public List getList()throws IOExeeption{
Stirng[]C=new Stirng[size+1];
while((C=readRow(size))!=nul1){
ArrayiLst llst=new ArrayList();
ofr(int i=1;i<size+1;i++)
list.add(C[i]);
biglist。add(1ist);
}
}
return biglist;
}
public String[]readRow(int eolumnSize)throws IOExeep—
tion{
return parameter;
}
ifnal public static ArrayList eradColumnValue(String line)
return list;
}
private Stirng getSubstring(String line,int idxO,int idx1)
}
}
Step 6 List对象作为参数进人业务逻辑层。然
后进人BO层,在BO层中将List对象的所有内容要
传递给hibernate映射的实体对象,最后进人数据
DAO层,调用hibernate.session中的save()方法,保
存到数据库。
Step 7将结果返回给ActionForward对象,从Ac—
tionForward对象中取得一个视图的路径。
Step 8异常处理,在执行doinput()方法时,若出
现上传错误,Action对象会将错误信息保存到Action—
Error对象中,错误对象再调用自身的saveErrors()方
法将错误保存到Request对象的属性中,Action对象
调用ActionMapping对象的getlnput()方法从动作映
射中获取input参数,并以input为参数生成一个Ac—
tionForward对象返回,将错误信息重定向到视图。
2数据导出到Excel的功能分析和实
现过程
针对某一批要导出的数据首先要根据查询条件
维普资讯
2007年第11期 杨勇虎等:Struts+Hibernate下实现Excel文件的导入导出
}
137
查询出来,然后再导人到Excel文件中去。借助于
Struts组件和hibernate实现数据查询,各组件间协作
机制和流程为: .
Step 1 ActionServlet接收来自客户端的H,I]rI)文
件上传请求(通常为 .do请求),针对此请求调用配
}
Step3然后进入业务逻辑层,进入BO层,最后
进入数据DAO层,抒写SQL语句,调用hibernate.ses-
sion中的createQuery(sq1)方法,将每条查询结果保
置文件struts—config.xml中的ActionMapping类得到
Action对象。
<action path=”/processQCourseScore”type=”stat.ac-
tion.QCourseScoreAction”
nsl ̄e=”QCourseScoreFormQuery”parameter=”method”
input=”/jsp/stat/qCourseScore.jsp”scope=”request”validate
=
”true”>
<forward name=”query”path=”/PreLCourseScoreAc-
tion.do”/>
<fowrard nsine=”return”path=”/jsp/stat/begin.jsp”/>
</action>
Step 2 Action调用ActionMapping映射表中的方
法得到FormBean对象,FormBean对象负责接收一些
查询的条件。将FormBean中的查询条件传递给对象
Action中的的doQuery()方法,该方法是LookupDis-
patchAction类中分发的一个业务方法。核心代码为:
public class QCourseScoreAction extends UfsLookupDis-
patchAction{
public SeoreBusiCtrl ScoreBusiCtrl=new ScoreBusiCtrl();
public CourseScoreBusilnfo couScoBusilnfo;
protected Map getKeyMethodMap(){
Map map=new HashMap();
map.put(”StatCouSco.Query”,”doQuery”);
map.put(”StatCouSco.Return”,”doReturn”);
erturn map;
}
public ActionForward doQuery(
ActionMapping mapping,
ActionFormform,
HttpServletRequest request,
HttpServletResponse response)throws Exception{
List result=new ArrayList();
couScoBusilnfo:new CourseScoreBusilnfo();
couScoBusilnfo=couScoBusilnfo.getCourseScoreBusilnfo
((DynaActionForm)form);
tr)r{
request.setAttifbute(”couScoList”,result);
result=ScoreBusiCtr1.getCourseScore(couScoBusilnfo);
erquest.setAttribute(”couScoList”,reslut);
}
catch(BasedException e){
ActionErrors error=new ActionErorrs();
elTor.add(”StatError”,new ActionError(”error.stater-
orr”));
saveErrors(request,error);
return(new ActionForward(mapping.getInput()));
}
erturn mapping.findForward(”query”);
存到一个类的对象中(此类是自定义的用来存储查
询结果的类,其属性名要与查询结果的列名相同),
再循环逐条加入到一个List对象中,最后返回到Ac-
tion中,然后给request对象设置Attribute。
Step 4将结果返回给ActionForward对象,从Ac-
tionForward对象中取得一个 .do的请求。针对此
请求调用配置文件struts—config.xml中的Action-
Mapping类得到Action对象,此Action可以做分页处
理。然后再返回ActionForward对象,从ActionFor-
ward对象中取得一个视图的路径。
Step 5在视图中可以加入export控件,Actions-
ervlet再接收来自客户端的导出请求 .do,针对此请
求调用配置文件struts—config.xml中的ActionMap-
ping类得到Acti6n对象,此对象可以进行输入表头的
处理。然后再返回ActionForward对象,从ActionFor-
ward对象中取得一个Web视图的路径。在视图中获
得request对象的查询结果属性。然后与Excel交互,
实现导人。
Step 6异常处理方法与导人类同。
3结束语
Web中Excel文件的导人导出,在JSP中也有很
多的实现过程,也有一些学者已经封装了这种应用的
类,一方面常规的方法需要重复编写大量套路式的代
码,另一方面别人封装好的方法使用起来不是很方
便,也不通用。根据自己的需求,使用目前比较流行
Struts+Hibernate的框架技术实现,一方面它本身封
装了开发包,可以直接使用包中的方法,另一方面也
可以自己封装一些相关的功能,譬如:分页处理以及
表头格式等。而且,框架技术对异常处理机制的支持
是常规方法无法比拟的,它将上传过程中的错误集中
控制并返回不同的错误信息,为具体设计相关的方法
带来了更大的实惠和很好的应用效果。
参考文献:
[1]戚艳军,等.基于Struts框架实现Web应用文件上传[J].西
安建筑科技大学学报(自然科学版),axe5(2);270-273.
[2] 施兴健,徐良贤.Hibemate在Struts中的研究和应用
[J].计算机工程,2004,30(z1):165-167,190.
[3]孙卫琴.基于MVC的Java Web设计与开发[M].北京:
电子工业出版社,2004.
[4]夏听,等.深入浅出Hibernate[M].北京:电子工业出版
社.2005.
[5] 马正华,周重益,潘操.基于Sturts架构的Web应用研究
与实现[J].工矿自动化,2005(6):12-14.
版权声明:本文标题:Struts+Hibernate下实现Excel文件的导入导出 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1711624538a602377.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论