1、整合/嵌套 顺序
SSH 名称 Struts2+Spring+Hibernate 决定了:Hibernate 整合/嵌套 进Spring,Spring 整合/嵌套 进Struts2
2、具体流程
1)配置好Struts2 检查无问题
2)Hibernate配置进Spring内 ,首先applicationContext.xml 加入如下代码:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.gjt.mm.mysql.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="zhangtao"/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<!-- <property name="annotatedClasses"><list><value>com.mavict.model.User</value></list></property> -->
<property name="packagesToScan"><list><value>com.mavict.model</value></list></property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.show_sql=true
hibernate.hbm2ddl.auto=update
hibernate.current_session_context_class=thread
</value>
</property>
</bean>
解释:首先配置数据库数据源myDataSource,然后以此数据源创建名为mySessionFactory的Session工厂。配置到此步之后,程序中就可以直接注入mySessionFactory拿Session了。
接着配置HibernateTemplate
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="mySessionFactory"></property>
</bean>
解释:以上述创建的mySessionFactory为源,创建hibernateTemplate,至此可以在程序内抛弃session,直接以hibernateTemplate来进行数据库操作了。
至此可以完全删除hibernate的配置文件hibernate.cfg.xml了。配置完成。
3)Spring 配置进Struts2。过程有一些繁琐。
首先,要明确,Spring配置进Struts2,即是Struts2首先启动之后,要让内嵌的Spring来创建和管理各个实例Bean,包括Struts的action类的bean...所以,首先将如下代码嵌入web.xml,而且要放在顶部,优先执行:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
注意:此处是按照个人习惯设置了applicationContext.xml放在项目的src目录下。默认应该是放在WEB-INF/lib下的。
这算是将spring嵌入了struts2。接着,要实现Spring来创建和管理各个实例Bean,还需引入jar包 struts-spring-plugin-...jar
再引入数据库连接jar包,配置完成。
__________________________________________________
需要注意的是,struts2引入spring之后,action类的写法注意举例如下:
@Component("nickname")
@Scope("prototype")
public class FirstAction {
private UserService us;
public UserService getUs() {
return us;
}
@Resource
//直接注入,无需 applicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); UserService us = ctx.getBean("userService");来获取bean了
public void setUs(UserService us) {
this.us = us;
}
public String execute(){
us.result("zhangtao's success!");return "success"; }
}
相应的struts.xml配置写法
<action name="first" class="nickname"> //注意此处class写法与@Component("nickname")中名字一致
<result>/first.jsp</result>
</action>
如果class不这样搞,而按照原样的写法,比如类似 class="com.xxx.action.FirstAction"写法,则struts会自动实例化此action class,没spring什么事了。spring那边即便是加了component,也白搭。务必要注意此处。
总结完毕