纠结了好久,记下
Eclispe下,Spring3+Struts2+Hibernate3.3
Spring与Struts的整合其实就是将Struts的Action交给Spring来处理
Spring整合Hibernate主要是对hibernate的Session进行管理,包含Session的创建、提交、关闭的整个生命周期:
1、在配置中,将Hibernate的sessionFactory交由Spring中的事务管理器管理
2、配置代理工厂,向工厂中注入事务管理器(设置abstract="true")
3、以后对于Hibernate实现具体操作服务的类,都交由代理工厂代理(parent="代理工厂id")
--------------------------------------------------------------------------------------------------
开始时用MyEclipse8.6搭建环境,结果各种奇葩的错误,都是包冲突的问题,但是却不知道怎么导包,就换成Eclipse,自己一个一个添加
Sturts2必需包
还要有一个Struts2-Spring-plugin-xxx.jar包,用于Spring和Struts2的整合
Hibernate必需包
Spring必需包
spring
导包时可能遇到包冲突问题,根据提示查看,看是包冲突还是缺少包,这一步花了蛮长时间
--------------------------------------------------------------------------------------------------
配置dataSource,需要{common-dbcp.jar}支持,若数据源所选的是另外的实现,则应导入其他相应的包
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://127.0.0.1:1433;databaseName=Users">
</property>
<property name="username" value="sa"></property>
<property name="password" value="1234"></property>
配置sessionFactory,最基本的配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
</props>
</property>
<property name="mappingResources">
<!-- <list> -->
<value>com/tian/test/User.hbm.xml</value>
<!-- </list> -->
</property>
具体做法是 ApplicationContext ac = newClassPathXmlApplicationC
ontext("applicationContext.xml");
看输出的ac是否为空,不为空,则以上配置正确
------------------------------------------------------------------------------------------------
接下来省略了代理器、代理器工厂的配置
直接在struts.xml中配置Action,将Action配置如下
<action name="logint" class="loginPro">
再在applicationContext.xml配置相应的bean
<bean id="loginPro" class="com.tian.test.LoginAction" scope="prototype"/>
scope不是必须。
在代码中尝试获取相应bean,发生org.hibernate.MappingException: entity class notfound错误
原因是Eclipse无法找到实体类,将xxx.hbm.xml中的实体对应的class属性修改为 包名+类名
<class name="com.tian.test.User" table="user" schema="dbo" catalog="Users">
--------------------------------------------------------------------------------------------------
在web.xml添加Spring容器以及Struts2过滤器
<!-- 配置spring的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 开启监听 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<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>
--------------------------------------------------------------------------------------------------
完成以上就可以实现基础的ssh整合了
导包时顺利则一切都没什么问题
Eclispe下,Spring3+Struts2+Hibernate3.3
Spring与Struts的整合其实就是将Struts的Action交给Spring来处理
Spring整合Hibernate主要是对hibernate的Session进行管理,包含Session的创建、提交、关闭的整个生命周期:
1、在配置中,将Hibernate的sessionFactory交由Spring中的事务管理器管理
2、配置代理工厂,向工厂中注入事务管理器(设置abstract="true")
3、以后对于Hibernate实现具体操作服务的类,都交由代理工厂代理(parent="代理工厂id")
--------------------------------------------------------------------------------------------------
开始时用MyEclipse8.6搭建环境,结果各种奇葩的错误,都是包冲突的问题,但是却不知道怎么导包,就换成Eclipse,自己一个一个添加
Sturts2必需包
还要有一个Struts2-Spring-plugin-xxx.jar包,用于Spring和Struts2的整合
Hibernate必需包
Spring必需包
spring
导包时可能遇到包冲突问题,根据提示查看,看是包冲突还是缺少包,这一步花了蛮长时间
--------------------------------------------------------------------------------------------------
配置dataSource,需要{common-dbcp.jar}支持,若数据源所选的是另外的实现,则应导入其他相应的包
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url"
value="jdbc:sqlserver://127.0.0.1:1433;databaseName=Users">
</property>
<property name="username" value="sa"></property>
<property name="password" value="1234"></property>
</bean>
配置sessionFactory,最基本的配置
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
</props>
</property>
<property name="mappingResources">
<!-- <list> -->
<value>com/tian/test/User.hbm.xml</value>
<!-- </list> -->
</property>
</bean>
具体做法是 ApplicationContext ac = newClassPathXmlApplicationC
看输出的ac是否为空,不为空,则以上配置正确
------------------------------------------------------------------------------------------------
接下来省略了代理器、代理器工厂的配置
直接在struts.xml中配置Action,将Action配置如下
<action name="logint" class="loginPro">
再在applicationContext.xml配置相应的bean
<bean id="loginPro" class="com.tian.test.LoginAction" scope="prototype"/>
scope不是必须。
在代码中尝试获取相应bean,发生org.hibernate.MappingException: entity class notfound错误
原因是Eclipse无法找到实体类,将xxx.hbm.xml中的实体对应的class属性修改为
<class name="com.tian.test.User" table="user" schema="dbo" catalog="Users">
--------------------------------------------------------------------------------------------------
在web.xml添加Spring容器以及Struts2过滤器
<!-- 配置spring的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 开启监听 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<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>
--------------------------------------------------------------------------------------------------
完成以上就可以实现基础的ssh整合了
导包时顺利则一切都没什么问题