一、主要内容
1、引入jar包
2、web.xml配置文件
3、Spring应用上下文配置文件
4、struts.xml配置文件
5、整合项目架构
二、引入jar包
1、引入SSH项目所需要的所有Jar包,分为四类:
1)Spring3的jar包
2)Hibernate4的jar包
3)Struts2的jar包
4)其他的jar包
2、我们以
Struts2.3.16、
Spring3.2.15、
Hibernate4.2.4
版本为例子进行整合
三、web.xml配置文件
1、web.xml配置文件是所有web应用最基本的配置文件,Spring框架Bean工厂的创建启动、Struts2框架的加载都在此配置
<!-- spring -->
<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>
<!-- struts2 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
针对spring需要一个监听器:
ContextLoaderListener监听器做一个spring框架的加载,生成spring的bean工厂,加载spring应用上下文的配置文件
针对struts2需要一个过滤器:
配置struts2的核心过滤器
四、Spring应用上下文配置文件
1、在SSH整合应用中,Spring应用上下文配置文件既是Spring框架IoC容器、AOP代理等的配置依据,又是与Hibernate等ORM工具集成管理的核心配置(包括dataSource、sessionFactory、TransactionManager等核心bean都在此注册),还是管理Struts2框架的Action等bean组件的配置所在,是名副其实的“bean工厂”配置
2、Spring对Hibernate的整合关键在于应用上下文配置文件中配置Hibernate Session工厂Bean
3、Hibernate原来的配置文件hibernate.cfg.xml已经融入Spring应用上下文配置文件,甚至hbm映射配置文件都由持久化领域类的注解所替代,hibernate框架的专有配置几乎消失
import javax.persistence.*
@Entity
@Table(name="myTwitter.users")
public class User {
@Id
private int id;
@Column
private String name;
@Column
private String password;
@Column
private String fullName;
}
4、Spring与Hibernate整合过程中需要解耦
1)以前Spring通过HibernateTemplate使用Hibernate,HibernateTemplate主要职责是管理Hibernate的Session,存在一定程序侵入性,与Spring API产生耦合
2)从Hibernate3开始引入了上下文Session(Contextual session),是Hibernate本身提供的保证每个事务使用同一Session的方案。该方式使DAO类不包含特定Spring代码
3)在Spring中,通过Spring的Hibernate Session工厂Bean来获取Hibernate的SessionFactory,在Spring上下文中配置Hibernate Session工厂Bean
4)Hibernate能够自己管理Session,不需要Spring的Hibernate模版,可以直接将Hibernate Session装配到DAO类中
五、struts.xml配置文件
1、struts2-spring-plugin-2.3.x.jar插件用于Struts2框架和Spring框架的整合
2、通常让Spring容器管理Struts2框架的控制器Action,为Action注入业务逻辑组件(如Service、DAO等组件实例)
3、一种做法:在struts.xml文件中配置该Action时,class属性不指向该Action实现类,而是Spring容器中该Action实例ID
4、另一种做法:Action在struts.xml中的配置依旧(class属性指向该Action实现类),使用注解方式让Spring容器管理Action的依赖注入、生命周期
<package name="SSHProject" extends="struts-default">
<action name="register" class="com.iotek.action.UserAction">
<result name="success">/WEB-INF/content/registerOK.jsp</result>
<result name="input">/register.jsp</result>
</action>
<action name="*">
<result>/WEB-INF/content/{1}.jsp</result>
</action>
</package>
@Scope("prototype")
@Component("register")
public class UserAction extends ActionSupport {
//省略相关字段
private UserManager userManager;
//省略相关字段的读写方法
@Resource(name="userManager")
public void setUserManager(UserManager userManager) {
this.userManager = userManager;
}
}
六、整合项目架构
1、表现层
1)JSP页面
2、业务逻辑层
1)domain包
2)action包
3)service包
3、数据访问层
1)DAO包
4、架构原则
1)通过接口耦合
2)事务管理在业务逻辑层实施