SSH框架(struts2+spring+hibernate)的整合方法
SSH框架在日常开发中占据了很重要的角色,下面记录一下具体的配置方法,以备后续迷茫时救急!
首先创建一个web项目是必不可少的,俗话说:巧妇难为无米之炊,大军未动粮草先行......我去,扯的有点多了......
正文开始:
第一步:手动导入struts2的8个基本jar包
commons-fileupload-1.2.1.jar
xwork-core-2.2.1.1.jar
struts2-core-2.2.1.1.jar
ognl-3.0.jar
javassist-3.12.0.GA.jar
commons-logging-1.0.4.jar
freemarker-2.3.16.jar
commons-io-1.3.2.jar
第二步:手动创建struts2的核心配置文件(此方法纯属增强记忆,为了提高开发效率,建议利用MyEclipse自动 生成 步骤:右键项目 -> myEclipse -> add struts capabilities)
步骤1: 在src下创建一个名为struts.xml的核心配置文件
步骤2: 打开struts.xml,输入如下内容
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
</struts>
注意:struts.xml正文部分参考struts2-core-2.2.1.1.jar中 org.apache.struts2下default.properties属性集文件
第三步:在web.xml中配置struts的核心过滤器(自动配置struts可忽略此步骤)
<filter>
<filter-name>struts2Filter</filter-name>
<!--位置:struts2核心包下org.apache.struts2.dispatcher.ng.filter下的StrutsPrepareAndExecuteFilter.class-->
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第四步:通过MyEclipse配置hibernate(注意:无需创建sessionFactory类)
第五步:通过MyEclipse配置spring
注意:1 选择 core+jdbc+javaweb (共5个选项)
2 选择通过spring创建sessionFactory的bean
第六步:在web.xml中配置spring
<!-- 声明spring的配置文件位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置spring的监听器 -->
<listener>
<!--位置:org.springframework.web-3.0.5.RELEASE.jar包下 org.springframework.web.context包下 ContextLoaderListener.class -->
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
第七步:在struts2的核心配置文件中 声明使用spring管理action对象
<!-- 声明使用spring管理action对象 通过常量配置:参考defualt.properties
struts.objectFactory = spring
struts.objectFactory.spring.autoWire = name
-->
<constant name="struts.objectFactory" value="spring"/>
<constant name="struts.objectFactory.spring.autoWire" value="name"
第八步:添加struts和spring结合的包(struts2-spring-plugin-2.2.1.1.jar 注意版本)
struts2-spring-plugin-2.2.1.1.jar
配置到这里,可以暂告一段落了。。。
这时候我们通过tomcat发布进行测试,
如果测试中console没有报错说明我们的配置很OK
没有问题继续向下走!
--------------------------------------------------未命名线------------------------------------------------------
接下来要配置的可能有一点点抽象了。。。
第九步:进入MySQL or Oracle数据库,通过MyEclipse的hibernate reverse Engineering反向生成DAO工具 类、hibernate映射文件(XX.hbm.xml)和entity实体类
第十步:在spring的核心配置文件中 创建一个 事务管理 bean
<!-- 创建HibernateTranscationManager的bean -->
<bean id="transactionManager_1" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
第十一步:为dao创建一个代理bean 关联事务管理bean
<!-- 通过TrancationProxyFactoryBean类 把事务管理bean和目标对象bean 、dao bean关联起来 形成一个代理bean -->
<bean id="studentDaoProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager"> <!-- 指定管理事务的bean -->
<ref bean="transactionManager_1"/>
</property>
<property name="target"> <!-- 指定目标对象的bean -->
<ref bean="studentDao"/>
</property>
<property name="proxyTargetClass"> <!-- 指定是否让代理bean替代 目标对象bean-->
<value>true</value>
</property>
<property name="transactionAttributes"> <!-- 事务传播属性 -->
<props>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
第十二步:创建jsp页面,创建action类
eg(action类):
public class StudentAction {
//定义成员变量接受请求参数
private String sname;
private String spwd;
private int sage;
//定义dao
private StudentDAO dao;
public String registMethod(){
Student s=new Student(sname, sage, spwd);
dao.save(s);
return "success";
}
}
<!-- 对action进行配置 -->
<package name="p1" extends="struts-default" namespace="/student">
<!--com.XXX.action.StudentAction需要更改为改为action的bean的id stuAction -->
<action name="regist" method="registMethod" class="com.XXX.action.StudentAction">
<result name="success"> /student/ok.jsp </result>
</action>
</package>
第十三步:在spring的配置文件中为action创建bean
<!-- 为action创建bean -->
<bean id="stuAction" class="com.XXX.action.StudentAction">
<!-- 给属性stuDao赋值 -->
<property name="dao">
<ref bean="studentDaoProxy"/>
</property>
</bean>
第十四步:删除cglib.jar包(原因:spring内有cglib.jar,造成两jar冲突)
步骤1:build path => remove build path
步骤2:删除lib文件夹下的cglib.jar