最近打算把SSH架构好好缕缕(以前断断续续学过和使用过一些),因为现在SSH(Struts+Spring +Hibernate)架构可以说是开发Web项目的一种轻量级的很好的解决方案,也比较成熟了,实际上在这三者(三个开源项目),Struts还是处理 前端的运用,Hibernate处理持久化工资,而Spring像个联合剂,它通过其applicationContext.xml配置文件,根据Ioc 模式将前两者需要的类实例化并提供给需要的地方(就是提供bean),当然其还可以在配置文件中提供声明性事物处理,可以极大地节约代码 (Hibernate可不可以了??)。下面来详细的说明一下:
我们先看看SS的结合,
其结合点在于将Struts中Action的实例生成不再由Struts自己负责,而交于Spring容器去管理,需要修改的地方是首先在Struts的配置文件上用plug-in加上Spring的配置文件applicationContext.xml,然后在在action的配置地方的type属性统统设为org.springframework.web.struts.DelegatingActionProxy,这样Action的具体实现就有Spring去负责了,在Spring的配置文件中把相应的Action设为bean,交由Spring容 器去处理。在这个地方有一个要注意的问题,就是为了使Struts的配置文件方便找到Spring的配置文件,我们把 applicationContext.xml放在WEB-INF下,而不是放在classpath下面了,这样如果在程序中要显示调用 ApplicationContext对象,就不能直接实例化它了,我们可以通过web context来取得它,具体做法是在web.xml中可以加一个Listener或是Servlet的声明(两者取一就可),Web容器会自动加载/WEB-INF/applicationContext.xml初始化ApplicationContext实例,配置完成之后,即可通过WebApplicationContextUtils.getWebApplicationContext
方法在Web应用中获取ApplicationContext引用。
方法在Web应用中获取ApplicationContext引用。
而对于Spring和Hibernate的结合点在于关于Hibernate的SessionFactory的配置交于了Spring,即我们可以不要 hibernate.cfg.xml,而将sessionFactory的配置作为bean来交给Spring的配置文件,当然在这里 SessionFactory的Class用 org.springframework.orm.hibernate3.LocalSessionFactoryBean,关于数据库的登陆信息可以单 独作为一个bean,如dataSource,然后在sessionFactory中引用。Spring对Hibernate提供大量的封装好的类,如 HibernateDaoSupport,这样我们在使用是甚至不用先生成SessionFactory,再生成Session等等操作,Spring都 提供了封装;还有很重要的一点就是在事物维持上,用Spring的声明性事物会更简单容易些,也更灵活。
以上简要的分析了以下三者整合的一些结合点和具体的使用方法。