论文部分内容阅读
[摘要]介绍了MVC多层开发模式和两种J2EE平台下的开发框架Struts和Hibernate。研究了两种框架的整合方法,并在信息发布系统中进行了实现。
[关键词]J2EE平台 MVC开发模式Struts框架Hibernate框架信息发布系统
近年来,在网络技术的迅速发展和J2EE平台被广泛采用的背景下,基于多层B/S结构的Web体系结构逐渐发展并成为主流[1]。但是,在多层Web体系结构的设计中,普遍存在着程序可重用度低、功能模块可扩展性差、维护工作繁琐及开发中分工协作困难等问题。设计一个松耦合和紧内聚的系统一直是软件工程领域重点研究的问题[2]。开源的基于MVC模式的Struts框架很好的解决了上述问题,但Struts框架只解决了视图层、业务层和控制层的分离,没有对复杂的持久层提供架构支持。而Hibernate作为另一种开源的对象/关系映射框架,提供了对象到关系数据库的持久化支持。本文将研究整合Struts与Hibernate轻量级框架,并在信息发布系统中进行应用。
一、主流开发框架与多层开发模式
1.Struts框架
Struts 是一个表示层的框架,它对经典的MVC设计模式有着良好的实现。Struts由一组相互协作的类(组件)、Serlvet以及JSP标签库组成,有它自己的控制器(Controller ),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合。在视图层,Struts能够与JSP、XSL等表示层组件结合。控制器(Controller)的实现是由ActionServlet, Action Mapping和一系列另外的Action类分工协作;模型(Model)由EJB,JDO(Java Data Object)和JavaBean业务对象(Business Object)构成;视图不仅由JSP, HTML, XML文件和定制标记(Custom Tags)表示,还包括由ActionForms和JavaBeans展现模型(View Model),以及由XML文件和属性文件(Property Files)构成的资源。
2. Hibernate框架
Hibernate 是一个持久层框架,是一个基于Java的对象/关系数据库映射工具,它将对象模型表示的数据映射到用SQL表示的关系模型上去。作为一个开放源代码的对象关系映射框架(ORM),它对JDBC进行了非常轻量级的对象封装[3],使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。它实现了实体类和数据库之间的对应和沟通。程序员不必频繁操作JDBC变成过程中的Connection、Statement、Result等这些对象,Hibernate将其中80%的工作量都自动完成,程序员只完成剩下20%具体实现业务功能的过程。
3.MVC开发模式
MVC模式为多层的Web应用开发模式,模式中M代表模型,V代表视图,C代表控制器。ActionServlet作为Struts的核心,扮演着中央控制器的角色,它负责接收Http请求,并且将产生的相应的响应传递到请求的页面,这个过程中,ActionServlet最初处于待命状态,当容器(如tomcat)接受到请求,它对应的doget和dopost将处理get和post请求,ActionServlet接收到请求后,将调用RequestProcess对象对消息进行处理,然后,它将根据浏览器的请求路径、struts-config.xml文件中对应的请求路径和Action Bean的对应关系来调用对应的Action Bean中的execute方法,之后调用业务模型,然后将含有下一个页面返回信息的ActionForward对象传给ActionServlet,再由ActionServlet转到下一个页面返回给浏览器,JSP、Javasc等则扮演着视图的角色。下图是MVC模式的逻辑实现图。
当Struts中的ActionServlet最终调用业务模型时,涉及到的有关关系数据库的存取问题,则交由Hibernate架构完成,图表2更直观的反映了Struts与Hibernate两种框架的结合。
二、系统方案
1.开发目的:
该信息发布系统是针对搭建综合型平台网站而开发,系统应能够接受用户的注册,在用户登录时还要识别用户的级别从而进入不同的权限页面以便发布信息或进行不同级别的管理。普通用户只能向所申请的栏目内发布信息;高级用户能对频道和栏目进行管理并具有普通用户的操作权限;超级管理员应能够通过用户管理模块对所有用户进行管理,此外还具有普通用户和高级用户的所有操作权限。系统同时要支持文章标题和内容两个层次的搜索,还要具有前台页面的分页显示功能。
2.功能模块划分
以下是根据业务需求进行的系统的功能模块划分:
(1)用户注册与登录模块;
(2)用户管理模块;
(3)频道与栏目管理模块;
(4)文章审核模块;
(5)文章发布及管理模块;
(6)站内搜索模块;
(7)分页显示模块。
3.系统的层次架构
为了使该系统具有更好的功能扩展性和可维护性,系统采用Struts 与Hibernate 框架进行整合开发,能缩短开发时间,降低开发成本。系统总体上可分为以下几个层次:
(1)表示层:运行在客户端浏览器中,用JSP页面完成与用户的交互。
(2)控制层:由Struts框架实现,该层中通过ActionServlet接收来自用户的Http请求,调用RequestProcess对象对消息进行处理,然后根据 struts-config.xml调用对应的ActionBean中的execute方法,之后调用业务模型,然后将含有下一个页面返回信息的ActionForward对象传给ActionServlet,再由ActionServlet转到下一个页面返回给浏览器。
(3)业务逻辑层:该层负责实现系统的业务需求,由创建的JavaBean来实现。
(4)数据持久层:由Hibernate框架实现,用Hibernate的对象从数据源中进行数据操纵。
(5)数据源层:存放系统的应用数据,该系统选用的是Oracle9.2。
三、平台实现
系统采用基于MVC模式的Struts+Hibernate结合的轻量级web架构开发,开发环境为Myeclipse8.5,JSP引擎为Tomcat6.0。视图层由JSP和HTML实现;Struts框架则为系统视图层与控制层提供解决方案;Hibernate框架负责完成与数据的获取与处理。下面以用户登录模块为例,研究Struts与Hibernate框架在信息发布系统中的应用。
1.表现层与控制层
这两层主要是基于Struts 框架,包含login.jsp等页面文件及LoginAction。
Struts-config.xml 配置文件部分代码如下:
……
name="loginForm"scope="request"validate="false">
……
2.业务层
下面代码用来验证用户身份的合法性,主题部分代码如下:
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginActionForm laf = (LoginActionForm)form;
String username = laf.getUsername();
String password = laf.getPassword();
String errorInfo = "";
try {
UserManager myUserManager=new UserManager();
myUserManager.login(username, password);
request.setAttribute("username", username);
return mapping.findForward("success");
}catch(UserNotFoundException unfe) {
unfe.printStackTrace();
errorInfo = "=[" + username + "]";
}catch(PasswordErrorException pee) {
pee.printStackTrace();
errorInfo = "";
}
request.setAttribute("errorinfo", errorInfo);
return mapping.findForward("error");
}
}
3.数据持久层
在生成数据模型时,需要对数据表进行Hibernate逆向工程,此时,每个数据表都会对应于生成一个Hibernate映射文件。以用户信息表User表为例,该过程会创建User.hbm.xml,同时生成User.java 类,并将注册信息加入到hibernate.cfg.xml 文件中。
下面是User.hbm.xml 配置文件中的部分代码:
……
下面是hibernate.cfg.xml 配置文件中的部分代码:
jdbc:oracle:thin:@192.168.100.1:1521:test
oracle.jdbc.driver.OracleDriver
inma_user
inma2009
org.hibernate.dialect.OracleDialect
……
……
四、总结:
基于J2EE的Web应用以其层次性、平台无关性、安全性和可扩展性成为目前企业Web 应用系统的主要解决方案。由于Web 应用系统开发的复杂性,可以采用分层开发的策略,将其分为表示层、业务层、持久层等。每层在应用程序都有明确的责任。Struts作为成熟的应用框架,在J2EE开发平台下有广泛的应用,对于MVC开发模式有着良好的实现;Hibernate框架实现了实体类和数据库中对应数据库之间的对应和沟通,使得Java程序员从复杂的Jdbc来操作中解脱出来,将更多的精力投入到业务逻辑中来。两种框架的整合使用,可以缩短开发时间,开发出低耦合、高内聚、易扩展、易维护的Web应用程序。
参考文献:
[1]段朋鹏:基于Struts和Hibernate的智能考试系统的研究与实现.[D].武汉:武汉理工大学,2008.4: 1-2
[2]高扩 魏振钢:整合Struts+Spring+Hibernate 框架的信息系统设计与研究.[J]现代计算机.2009.5:147
[3] 杨波刘渊冷文浩:基于Struts+Hibernate+Spring架构的船舶数字化平台的设计与实现[J]. 计算机应用与软件.2008.2(25):178
[关键词]J2EE平台 MVC开发模式Struts框架Hibernate框架信息发布系统
近年来,在网络技术的迅速发展和J2EE平台被广泛采用的背景下,基于多层B/S结构的Web体系结构逐渐发展并成为主流[1]。但是,在多层Web体系结构的设计中,普遍存在着程序可重用度低、功能模块可扩展性差、维护工作繁琐及开发中分工协作困难等问题。设计一个松耦合和紧内聚的系统一直是软件工程领域重点研究的问题[2]。开源的基于MVC模式的Struts框架很好的解决了上述问题,但Struts框架只解决了视图层、业务层和控制层的分离,没有对复杂的持久层提供架构支持。而Hibernate作为另一种开源的对象/关系映射框架,提供了对象到关系数据库的持久化支持。本文将研究整合Struts与Hibernate轻量级框架,并在信息发布系统中进行应用。
一、主流开发框架与多层开发模式
1.Struts框架
Struts 是一个表示层的框架,它对经典的MVC设计模式有着良好的实现。Struts由一组相互协作的类(组件)、Serlvet以及JSP标签库组成,有它自己的控制器(Controller ),同时整合了其他的一些技术去实现模型层(Model)和视图层(View)。在模型层,Struts可以很容易的与数据访问技术相结合。在视图层,Struts能够与JSP、XSL等表示层组件结合。控制器(Controller)的实现是由ActionServlet, Action Mapping和一系列另外的Action类分工协作;模型(Model)由EJB,JDO(Java Data Object)和JavaBean业务对象(Business Object)构成;视图不仅由JSP, HTML, XML文件和定制标记(Custom Tags)表示,还包括由ActionForms和JavaBeans展现模型(View Model),以及由XML文件和属性文件(Property Files)构成的资源。
2. Hibernate框架
Hibernate 是一个持久层框架,是一个基于Java的对象/关系数据库映射工具,它将对象模型表示的数据映射到用SQL表示的关系模型上去。作为一个开放源代码的对象关系映射框架(ORM),它对JDBC进行了非常轻量级的对象封装[3],使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。它实现了实体类和数据库之间的对应和沟通。程序员不必频繁操作JDBC变成过程中的Connection、Statement、Result等这些对象,Hibernate将其中80%的工作量都自动完成,程序员只完成剩下20%具体实现业务功能的过程。
3.MVC开发模式
MVC模式为多层的Web应用开发模式,模式中M代表模型,V代表视图,C代表控制器。ActionServlet作为Struts的核心,扮演着中央控制器的角色,它负责接收Http请求,并且将产生的相应的响应传递到请求的页面,这个过程中,ActionServlet最初处于待命状态,当容器(如tomcat)接受到请求,它对应的doget和dopost将处理get和post请求,ActionServlet接收到请求后,将调用RequestProcess对象对消息进行处理,然后,它将根据浏览器的请求路径、struts-config.xml文件中对应的请求路径和Action Bean的对应关系来调用对应的Action Bean中的execute方法,之后调用业务模型,然后将含有下一个页面返回信息的ActionForward对象传给ActionServlet,再由ActionServlet转到下一个页面返回给浏览器,JSP、Javasc等则扮演着视图的角色。下图是MVC模式的逻辑实现图。
当Struts中的ActionServlet最终调用业务模型时,涉及到的有关关系数据库的存取问题,则交由Hibernate架构完成,图表2更直观的反映了Struts与Hibernate两种框架的结合。
二、系统方案
1.开发目的:
该信息发布系统是针对搭建综合型平台网站而开发,系统应能够接受用户的注册,在用户登录时还要识别用户的级别从而进入不同的权限页面以便发布信息或进行不同级别的管理。普通用户只能向所申请的栏目内发布信息;高级用户能对频道和栏目进行管理并具有普通用户的操作权限;超级管理员应能够通过用户管理模块对所有用户进行管理,此外还具有普通用户和高级用户的所有操作权限。系统同时要支持文章标题和内容两个层次的搜索,还要具有前台页面的分页显示功能。
2.功能模块划分
以下是根据业务需求进行的系统的功能模块划分:
(1)用户注册与登录模块;
(2)用户管理模块;
(3)频道与栏目管理模块;
(4)文章审核模块;
(5)文章发布及管理模块;
(6)站内搜索模块;
(7)分页显示模块。
3.系统的层次架构
为了使该系统具有更好的功能扩展性和可维护性,系统采用Struts 与Hibernate 框架进行整合开发,能缩短开发时间,降低开发成本。系统总体上可分为以下几个层次:
(1)表示层:运行在客户端浏览器中,用JSP页面完成与用户的交互。
(2)控制层:由Struts框架实现,该层中通过ActionServlet接收来自用户的Http请求,调用RequestProcess对象对消息进行处理,然后根据 struts-config.xml调用对应的ActionBean中的execute方法,之后调用业务模型,然后将含有下一个页面返回信息的ActionForward对象传给ActionServlet,再由ActionServlet转到下一个页面返回给浏览器。
(3)业务逻辑层:该层负责实现系统的业务需求,由创建的JavaBean来实现。
(4)数据持久层:由Hibernate框架实现,用Hibernate的对象从数据源中进行数据操纵。
(5)数据源层:存放系统的应用数据,该系统选用的是Oracle9.2。
三、平台实现
系统采用基于MVC模式的Struts+Hibernate结合的轻量级web架构开发,开发环境为Myeclipse8.5,JSP引擎为Tomcat6.0。视图层由JSP和HTML实现;Struts框架则为系统视图层与控制层提供解决方案;Hibernate框架负责完成与数据的获取与处理。下面以用户登录模块为例,研究Struts与Hibernate框架在信息发布系统中的应用。
1.表现层与控制层
这两层主要是基于Struts 框架,包含login.jsp等页面文件及LoginAction。
Struts-config.xml 配置文件部分代码如下:
……
……
2.业务层
下面代码用来验证用户身份的合法性,主题部分代码如下:
public class LoginAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
LoginActionForm laf = (LoginActionForm)form;
String username = laf.getUsername();
String password = laf.getPassword();
String errorInfo = "";
try {
UserManager myUserManager=new UserManager();
myUserManager.login(username, password);
request.setAttribute("username", username);
return mapping.findForward("success");
}catch(UserNotFoundException unfe) {
unfe.printStackTrace();
errorInfo = "=[" + username + "]";
}catch(PasswordErrorException pee) {
pee.printStackTrace();
errorInfo = "";
}
request.setAttribute("errorinfo", errorInfo);
return mapping.findForward("error");
}
}
3.数据持久层
在生成数据模型时,需要对数据表进行Hibernate逆向工程,此时,每个数据表都会对应于生成一个Hibernate映射文件。以用户信息表User表为例,该过程会创建User.hbm.xml,同时生成User.java 类,并将注册信息加入到hibernate.cfg.xml 文件中。
下面是User.hbm.xml 配置文件中的部分代码:
……
下面是hibernate.cfg.xml 配置文件中的部分代码:
……
……
四、总结:
基于J2EE的Web应用以其层次性、平台无关性、安全性和可扩展性成为目前企业Web 应用系统的主要解决方案。由于Web 应用系统开发的复杂性,可以采用分层开发的策略,将其分为表示层、业务层、持久层等。每层在应用程序都有明确的责任。Struts作为成熟的应用框架,在J2EE开发平台下有广泛的应用,对于MVC开发模式有着良好的实现;Hibernate框架实现了实体类和数据库中对应数据库之间的对应和沟通,使得Java程序员从复杂的Jdbc来操作中解脱出来,将更多的精力投入到业务逻辑中来。两种框架的整合使用,可以缩短开发时间,开发出低耦合、高内聚、易扩展、易维护的Web应用程序。
参考文献:
[1]段朋鹏:基于Struts和Hibernate的智能考试系统的研究与实现.[D].武汉:武汉理工大学,2008.4: 1-2
[2]高扩 魏振钢:整合Struts+Spring+Hibernate 框架的信息系统设计与研究.[J]现代计算机.2009.5:147
[3] 杨波刘渊冷文浩:基于Struts+Hibernate+Spring架构的船舶数字化平台的设计与实现[J]. 计算机应用与软件.2008.2(25):178