1,运用的工具:Myeclipse8.5, tomcat 6.0, struts2,
2,在myeclipse的工作环境中,新建一个web progect,把spring,struts,hibernate的jar包给导入进来,导入步骤不再是通过myeclipse导入,而是把自己下载好的jar包复制到webroot目录下的lib目录下。
3,通过web.xml来加载spring的环境。也就是说在web.xml的文件中加入如下代码:
<!-- 以下是配置spring的参数,contextConfigLocation用于指定spring的配置文件的路径, listener在框架启动的时候,自动会读取contextConfigLocation所指的配置文件 -->
<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>
说明:listener优先启动;注意:一些配置文件必须放在src的目录下,否则会抛错误,说找不到文件。
4,struts2按照以前的用法,配置好。struts2的配置文件包括两个:一个是struts.xml,一个是web.xml,其中web.xml中配置的是filter的代码,是struts的启动环境,如下:
<!-- 以下是配置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>*.action</url-pattern>
</filter-mapping>
另一个是struts.xml的配置,先按照之前的配置,配置好,如下:
<package name="UserAction" extends="struts-default">
<action name="UserLoginAction" class="com.insigma.sshtest.action.UserLoginAction" method="hello" >
<result name="ok">/user_login.jsp</result>
</action>
</package>
此时可以先测试一下,看看struts配置是否有问题,通过在url中输入:localhost:8080/项目名称/UserLoginAction.action。
5,spring与struts2的整合。
1)struts2.xml需要修改一下:
<constant name="struts.objectFactory" value="spring" ></constant>
<package name="UserAction" extends="struts-default">
<action name="UserLoginAction" class="userlogin" method="hello" >
<result name="ok">/user_login.jsp</result>
</action>
</package>
增加了上面那句话,那句话表示:我的对象不是通过自己来new的,而是通过spring来创造的。添加了这句话之后,上面的那个类:class="com.insigma.sshtest.action.UserLoginAction"就可以配置到spring的bean里面了。
在spring的配置文件applicationContext.xml中写bean代码:
<bean id="userlogin" class="com.insigma.sshtest.action.UserLoginAction"scope="prototype"></bean>
说明:struts.xml中的class不再是action类的全路径地址,而是spring配置文件中的bean的id的名字,两者必须一致。而spring的配置文件中的class就是原先在struts.xml中配置的class的路径。
6,但是现在有个冲突struts中的一个类中可以有多个方法,也就是说有多个action,而spring中却只能是单个的,这时就有冲突,需要在spring的配置文件中加上scope="prototype"这句话,spring的bean默认是单例的,也就是说只能new一个实例,但是当用struts的时候,需要将scope配置成proprtype的,它表示每个访问就new一个实例。
7,spring与hibernate的整合:有两种方式整合,一种是不要hibernate.cfg.xml这个文件,一个是要这个文件,这里只讲解有原先的hibernate.cfg.xml文件情况下如何配置?
1)先把配置好的hibernate.cfg.xml文件复制到src目录下面。
2)在spring的配置文件中写如下代码:
<!-- 关于hibernate的配置,这个是在保留原来的hibernate.cfg.xml文件情况下 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml"> </property>
</bean>
3)dao的改造:
1),不再继承自BaseHibernateDAO,而是继承自HibernateDaoSupport。HibernateDaoSupport里面就有getsession这个方法,但是不推荐使用这个,而是通过spring的get bean来操作。所有的增删改查,通过gethibernatetemplate() 来操作。
2)getsession与gethibernatetemplate()的区别是:getsession是直接获取原始的session来操作,需要自己加事务,而gethibernatetemplate()不用考虑事务,由spring来管理。
3)配置到spring,在spring中加入下面代码:
<bean id="userDao" class="com.insigma.sshtest.dao.TblRegisterUserDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>