帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
结合struts和hibernate谈J2EE架构的数据表示
作者:佚名 发布时间:2005-04-02 来源:不详
 
  在 struts+ hibernate
不管他是Iterator,还是Li
这种结构中,是不应该把Hiber
st,这是一个设计错误。
nate产生的PO直接传递给JSP的,


  我来谈谈在J2EE架构中各层的数据表示方法:                                 

  Web层的数据表示是FormBean,数据来源于HTML Form POST
  业务层的数据表示是VO                                                       
  持久层的数据表示是PO,其数据来源于数据库,持久层的数据表示例如CMP       

  在一个规范的J2EE架构
,这样可以降低层间的耦合
辑进行了修改,那么只需要
同样滴,当数据库表进行了
层代码和Web层代码。
中,不同层的数据表示应该被限
性,提高J2EE架构整体的可维护
修改FormBean的结构,而不需要
小的调整,那么也只需要修改持

制在层内,而不应该扩散到其它层
性和可扩展性。比如说Web层的逻
触动业务层和持久层的代码修改。
久层数据表示,而不需要触动业务


  不过由于Hibernate的
得在应用了Hibernate的J2E
为PO。
强大功能,例如动态生成PO,PO
E框架中,PO完全可以充当VO,

的状态管理可以脱离Session,使
因此我们下面把PO和VO合并,统称


  先来谈谈ActionFormBean和持久层的PO之间的重大区别。           

  在简单的应用中,ActionFormBean和
ActionFormBean来充当PO,于是ActionFo
穿过持久层,最后一直映射到数据库表。
PO几乎是没有区别,所以很多人干脆就是用
rmBean从JSP页面到Servlet控制层再到业务层,然后
真是一竿子捅到了底!

  但是在复杂的应用中,ActionFormBe
ActionFormBean是和网页里面的Form表单
么属性。而PO和数据库表对应,因此如果
程和数据库表字段对应关系不一致,那么
an和PO是分离的,他们也不可能一样。
一一对应的,Form里面有什么元素,Bean里面就有什
数据库表不修改,那么PO也不会修改,如果页面的流
你又如何能够使用ActionFormBean来取代PO呢?

  比如说吧,用户注册页
属性,于是你需要一个Acti
一个文本框或者选择框什么
面要求注册用户的基本信息,因
onFormBean来一一对应(注意:
的。
此HTML Form里面包含了基本信息
是一一对应),每个Bean属性对应


  而用户这个持久对象呢?他的属性和
ActionFormBean所没有的集合属性,比如
。另外还有可能的是在ActionFormBean里
Name, Last Name,而在我的User这个持
ActionFormBean有什么明显不同呢?他会有一些
说用户的权限属性,用户的组属性,用户的帖子等等
面有3个属性,分别是用户的First Name, Middle
久对象中就是一个 Name 对象属性。

  假设我的注册页面原来
我要你提供全名,你要改Ac
为数据库没有改。
只要你提供First Name,那么Ac
tionFormBean,加两个属性。但

tionFormBean就这一个属性,后来
是这个时候PO是不应该修改滴,因


  那么在一个完整的J2EE系统中应该如何进行合理的设计呢?                     

  JSP(View) ---> ActionFormBean(Module) ---> Action(Control)


  ActionFormBean是Web
发生改变,它就要相应的进
修改,会一直牵连到业务层
性而言,是一个灾难,Acti
层的数据表示,它和HTML页面Fo
行修改,它不应该也不能被传递
和持久层的大面积的代码进行修
ont就是他的边界,到此为止!
rm对应,只要Web页面的操作流程
到业务层和持久层,否则一旦页面
改,对于软件的可维护性和可扩展


  Action(Web Control) ---> Business Bean ---> DAO ---> ORM --->DB


  而PO则是业务层和持久
能被传递到Web层的View中
层的数据表示,它在业务层和持
去,而ActionServlet就是他的
久层之间进行流动,他不应该也不
边界,到此为止!

  然后来看一看整个架构的流程:                                                 

  当用户通过浏览器访问网页,提交了
FormBean属性读出来,然后构造一个PO对
向到成功页面。而业务层Bean收到这个PO
化操作。
一个页面。于是Action拿到了这个FormBean,他会把
象,再调用业务层的Bean类,完成了注册操作,重定
对象之后,调用DAO接口方法,进行持久对象的持久


  当用户查询某个会员的信息的时候,
UserNameFormBean包括了3个属性,分别
Action把UserNameFormBean的3个属性读
传递给业务Bean,进行查询。
他用全名进行查询,于是Action得到一个
是first name, middle name, last name,然后
出来,构造Name对象,再调用业务Bean,把Name对象


  业务Bean取得Name(注
个User的PO对象,注意这个
然后业务Bean把User对象返
意: Name对象只是User的一个属
User不同于在Web层使用的UserF
回给Action。
性)对象之后调用DAO接口,返回一
ormBean,他有很多集合属性滴。


  Action拿到User之后,
UserFormBean,然后把User
面。
把User的基本属性取出(集合属
FormBean request.setAttribut

性如果不需要就免了),构造
e(...),然后重定向到查询结果页


  查询页面拿到request对象里面的Act
ionFormBean,自动调用tag显示之。

  总结:                                                                       

  FormBean是Web层的数
情况下,例如Hibernate中
务层内使用,最多到达Web
据表示,他不能被传递到业务层
,他可以取代VO出现在业务层,
层的Control,绝不能被扩散到V
;PO是持久层的数据表示,在特定
但是不管PO还是VO都必须限制在业
iew去。

  FormBean和PO之间的数据转化是在Action中进行滴。               
 
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·XML和J2EE的完美结合  (2005-04-02)
 ·ADO存取数据库如何与HTML结合  (2005-03-12)
 ·ASP和SQL结合处理时间小解  (2005-03-12)
 ·结合asp和存储过程做的搜索程序  (2005-03-12)
 ·自己动手,结合javascript和dhtm  (2005-03-12)
 ·将VB中的CLASS结合到VBscript中来  (2005-03-12)
 ·利用自己开发的vc组件结合asp实现  (2005-03-12)
 ·SQL Server同Index Server的结合  (2005-03-12)
 ·SQL Server同Index Server的结合  (2005-03-12)
 ·Flash和Asp数据库的结合应用  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统