SSH 整合笔记

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,也白搭。务必要注意此处。

总结完毕

原文地址:https://www.cnblogs.com/appzhang/p/2932813.html