整合StrutsHibernateSpring的基本流程

上传人:xuey****n398 文档编号:166494839 上传时间:2022-11-01 格式:DOCX 页数:5 大小:11.49KB
返回 下载 相关 举报
整合StrutsHibernateSpring的基本流程_第1页
第1页 / 共5页
整合StrutsHibernateSpring的基本流程_第2页
第2页 / 共5页
整合StrutsHibernateSpring的基本流程_第3页
第3页 / 共5页
点击查看更多>>
资源描述
整合Struts+Hibernate+Spring的基本流程Struts相对来说算是最简单的了,至于Hibernate,最基本的当然是它的ORM机制了,学了Hibernate,才真正体会到完全的面向对象编程,结合HQL,对数据库的操作进行了很大幅度的封装,它的复杂之处在于缓存的管理和抓取策略,如果处理得不好,不仅不会提高效率,反而会加重系统资源的消耗;当我们用MVC开发程序时,难免会写上很多factory、很多singleton,尤其是Dao的实现,这些东西管理起来还是要花不少代码量的,有了Spring,我们几乎就不需要factory了,以前factory的职责,我们完全由Spring的IoC容器来管理,你也可以配置是否使用singleton,这样一来,我们把对对象的管理全部抽取出来了,放到Spring的配置文件里了,相对来说省了不少事,而且易于维护,另一方面,使用Spring很重要的一方面是使用它的声明式事务,当我们使用Hibernate来操作数据库时,跟Session、Transaction打的交到最多了,N多N多的累赘代码,现在好了,有了Spring和它的AOP思想,把对事务的操作全部以代理的模式切入进去,我们要做的仅仅只是一些配置就够了,用HibernateTemplete封装所有的session的操作,当然web服务(集成Struts)时,别忘了openSessionInViewFilter的设置。每学完一个框架,我都会把以前的项目的某个模块改成由该框架来实现,先是Struts,然后是Struts+Hibernate,然后是Spring+Hibernate,现在是Struts+Hibernate+Spring,呵呵,三者结合,配置文件不少,简单对集成SSH的流程做个总结:第一步:引入SSH三者的jar包,struts1.2还有Hibernate3.2的jar包直接就可以从MyEclipse中引入,当然你也可以手动从二者的开发包中拷贝,Spring相关的jar包建议不要使用MyEclipse中提供的,对orm支持的不是很好,容易出问题,最好直接从官网下的开发包中拷贝。第二步:SSH三者的配置文件,先说Struts的吧,我们习惯在Action中持有一个Dao的引用操作数据库,有了Spring,我们可以把Dao的引用抽取出来交给IoC容器管理,问题是Action不是我们手动New出来的,而是ActionServlet从Map中取出来的,没有经过Spring的BeanFactory,如何让Dao注入到Action中呢?所以这里要使用Spring提供的 DelegatingActionProxy,它也是一个Action,我们将自己的Action配置到Spring中给一个name属性,然后在Struts-config.xml中把Action的type改成DelegatingActionProxy,它会到IoC容器中获取Action,完成Dao的注入并执行自己的execute方法,Struts-config.xml中需要注入其他属性的Action的配置类似下面的代码: 我在这个Action中引用了一个Dao来操作数据库,别忘了设置setter,否则无法注入public class ItemAction extends DispatchAction private ItemManager itemManager; /Daopublic void setItemManager(ItemManager itemManager) this.itemManager = itemManager; public ActionForward add(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception /more code/more method然后将Dao的实现和该Action配置到Spring配置文件中,因为Dao是使用HibernateDaoSupport提供的HibernateTemplete,所以对Dao需要注入sessionFactory,包括事务管理器都需要sessionFactory,所以必须指定Hibernate的配置文件,配置sessionFactory,我把这些公用的配置(Spring的声明式事务)放到单独的一个applicationContext-common.xml中,如下: classpath:hibernate.cfg.xml 现在我们把Dao和Action配置到另一个applicationContext-beans.xml和applicationContext-actions.xml中,之所以配置到多个Spring配置文件是方便管理,视个人情况而定! Action的配置需要注意,采用name命名,值对应于struts-config.xml中的的path属性,这样DelegatingActionProxy才能该Action,class属性对应完整的类路径,scope可以指定是否采用singleton,因为Action是非线程安全的(ActionServlet采用singleton创建Action),我们可以在这里指定prototype使Action的实例化不用singleton,效率上不会有多大影响,消除了线程安全问题,当然scope=singleton可以指定Action仍然使用singleton模式。然后注入Dao。第三步:下面的问题是,当request请求一个Action时,交给了DelegatingActionProxy接收,由它从IoC容器中取出真正我们需要的的Action,取的时候它需要有BeanFactory,需要初始化WebApplicationContext,它需要在servletContext中获取contextConfigLocation参数来找到Spring的配置文件进而初始化,这时,我们可以通过Spring提供给我们的ContextLoaderListener来在web server初始化时初始化WebApplicationContext,在web.xml做如下配置: contextConfigLocationclasspath*:applicationContext-*.xmlinit the param contextConfigLocation for springorg.springframework.web.context.ContextLoaderListenerCharsetEncodingFilterorg.springframework.web.filter.CharacterEncodingFilter encoding GBK CharsetEncodingFilter/* openSessionInViewFilterorg.springframework.orm.hibernate3.support.OpenSessionInViewFilteropenSessionInViewFilter/*另外,我们使用Hibernate都会使用 Lazy Load,所以在web.xml中还需配上Spring提供的openSessionInViewFilter(Struts+Hibernate集成的时候,这个Filter都是自己写的,用的是ThreadLocale模式),另外Spring还提供了一个CharacterEncodingFilter,都在web.xml中配上(openSessionInViewFilter是必须的)最后,在Dao中的操作全部交由HibernateTemplete操作就搞定了,根本不需要理会session和transaction的控制,代码量急剧减少,呵呵!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!