分布集成三大框架:
第一步:集合三大框架开发的jar包,并放置项目的lib目录下,如下图所示:
这些jar包有一些可有可无,但是对于做一个比较全面的,考虑周全的系统,建议都加载这些jar包,初学者也更不容易出错。
第二步:在自己的项目下新建一个bean.xml(这里面主要是集成配置三大框架)
① 配置数据源:
<!-- 采用的事c3p0数据源配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="org.gjt.mm.mysql.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/itcast?useUnicode=true&characterEncoding=UTF-8"/> <property name="user" value="root"/> <property name="password" value="root"/> <!--初始化时获取的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 --> <property name="initialPoolSize" value="1"/> <!--连接池中保留的最小连接数。--> <property name="minPoolSize" value="1"/> <!--连接池中保留的最大连接数。Default: 15 --> <property name="maxPoolSize" value="300"/> <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime" value="60"/> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> <property name="acquireIncrement" value="5"/> <!--每60秒检查所有连接池中的空闲连接。Default: 0 --> <property name="idleConnectionTestPeriod" value="60"/> </bean>
② 将sssionFactory交给spring的事物管理器中,并将数据源注入到sessionFactory中:
<!-- hibernate的sessionFactory配置 --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mappingResources"> <list> <value>cn/jxau/po/Employee.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <value> hibernate.dialect=org.hibernate.dialect.MySQL5Dialect<!-- 使用的Mysql5的方言 --> hibernate.hbm2ddl.auto=update<!--是否根据映射源数据,根据数据生成表结构 --> hibernate.show_sql=false<!--是否打印出hibernate中的sql语句 --> hibernate.format_sql=false<!-- 是否对其sql语句进行格式化 --> </value> </property> </bean>
通过这个配置,我们就获得一个spring对外的一个对数据库操作的单例sesionFactory对象。
第三步:配置spring对hibernate的事物管理器
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"/> </bean>
对创建的sessionFactory对象进行事物管理。
第四步:声明事物(这里采用注解的方式进行配置)
<tx:annotation-driven transaction-manager="txManager"/>
第五步:配置PO层映射文件:
首先建立自己对应数据表的PO,并在该类的包下对应建立相应的xml文件,比如PO的名字为Employee.java,那个采用xml映射数据库表的话,就需要建立Employee.hbm.xml,并将这个文件交给spring中的sessionFactory进行管理,配置如下:
<property name="mappingResources"> <list> <value>cn/itcast/po/Employee.hbm.xml</value> </list> </property>
第六步:编写Employee.hbm.xml文件(数据库映射配置文件):
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.linhao.po"> <class name="Employee"> <id name="username" length="20"/> <property name="password" length="20" not-null="true"/> <property name="sex" not-null="true" length="5"> <type name="org.hibernate.type.EnumType"> <param name="enumClass">cn.itcast.po.Gender</param> <!-- 12为java.sql.Types.VARCHAR常量值,即保存枚举的字面值到数据库。如果不指定type参数,保存枚举的索引值(从0开始)到数据库--> <param name="type">12</param> </type> </property> </class> </hibernate-mapping>
以上就完成hibernate和spring的集成,当然你也可以选择不写数据表的映射文件,利用注解进行配置hibernate,这个注解配置映射我就不多说 了。
第六步:集成好hiberbate和spring,那么进行测试(测试可以用以下例子来进行,personService业务benan自行配置,这里只介绍如何集成三大框架):
以上是已经集成好hibernate和spring,但是要注意在编写配置好了之后,用以下代码进行测试:
package Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.jxau.ruanjian1201.springWeb1.po.Person; import com.jxau.ruanjian1201.springWeb1.service.impl.PersonService; import com.jxau.ruanjian1201.springwe1.service.PersonServiceImpl; public class JunitTest { private static PersonServiceImpl personService; public static void setUpBeforeClass() throws Exception { try { ApplicationContext cxt = new ClassPathXmlApplicationContext( "beans.xml"); personService = (PersonServiceImpl) cxt.getBean("personService"); System.out.println(personService); } catch (RuntimeException e) { e.printStackTrace(); } } public static void main(String[] args) { try { setUpBeforeClass(); personService.save(new Person("linhao")); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
第七步:spring和hibernate集成之后,就是和struts2集成
1、Struts2与spring集成步骤:
第一步:在测试的时候我们需要实例化spring容器,才能使用spring里面的事物,但是其实spring对外有个监听器,我们只需要在web.xml进行配置spring容器的监听器就可以了。首先在web.xml中实例化spring容器
<!--指定spring的配置文件,服务器启动的时候默认从web根目录寻找配置文件,我们可以通过spring提供的classpath前缀指定从类路径下寻找->
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:beans.xml</param-value> </context-param> <!-- 对spring容器进行实例化 --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
该监听器会将spring实例化并将其放在application中,如果想得到这个实例,可以通过application进行得到
2、配置struts2的jar包:下载好struts2的压缩包后解压,在其lib目录下所有的不带-plgin结尾的jar文件,但是除了struts2-spring-plugin-2.0.11.1.jar(上面已经给出所需的所有jar包)
3、第三步,利用filter在web.xml中启动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>
4、配置struts2的配置模板struts.xml,我这里列举了一些配置选项,对开发的是否更有帮助:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <!--指定Web应用的默认编码集,相当于调用HttpServletRequest的setCharacterEncoding方法 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <!--该属性指定需要的Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开 --> <constant name="struts.action.extension" value="do"/> <!--设置浏览器是否缓存静态内容,默认值是true(生产环境下使用),开发阶段最好关闭 --> <constant name="struts.serve.static.browserCache" value="flase"/> <!--当struts的配置文件修改后,系统是否自动从新加载该文件,默认值为false(生产环境下使用),开发阶段最好打开 --> <constant name="struts.configuration.xml.reload" value="true"/> <!--开发环境下使用,这样可以打印出更详细的错误信息 --> <constant name="struts.devMode" value="true"/> <!-- 默认的视图主题 --> <constant name="struts.ui.theme" value="simple" /> <!-- struts2和spring关键切入点,这个action是声明由spring帮忙创建 --> <constant name="struts.objectFactory" value="spring" /> <package name="person" namespace="/person" extends="struts-default"> <global-results> <result>/WEB-INF/view/message.jsp</result> </global-results> <!--使用通配符,进行视图的转换 --> <action name="action_*" class="personOperateAction" method="{1}"><!--此class的名字是你配置在spring中的bean的id名字,必须在beans.xml中或者利用注解进行以来注入 --> <result name="list">/WEB-INF/view/person.jsp</result> <result name="add">/WEB-INF/view/person_add.jsp</result> <result name="edit">/WEB-INF/view/person_edit.jsp</result> </action> </package> </struts>
5.完成以上步骤之后就可以进行SSH2集成开发(控制层中的action需要用@Controller声明(或者在beans.xml中配置)这样才能用spring事物管理机制进行管理进行依赖注入)。