SSH集成总结

 

1       目标

1.      熟练掌握StrutsSpringHibernate集成开发

2.      完成StrutsHibernate强化训练项目的改版升级工作。

2       要求

1.      必须按要求对工程,包,类,方法命名。

2.      沿用strutsHibernate强化训练工程要关资源。

3.      将项目改版到SSH

4.      开发工具使用Eclipse3.2+Myeclipse5.5

3       作业

3.1        建立SSH开发基础环境(重要部分)

1、  在原有项目中导入Spring2.0相关的Jar包。

2、  删除项目中的所有Jar包,将“附件/SSH相关的Jar包”目录中的所有jar包复制到工程的WEB-INF/lib目录下。

3、  导入DBCP数据库连接池Jar包。

4、  将附件文件夹中的log4j.properties配置文件加入到resources目录中。

3.2        HibernateSpring集成

3.2.1  Hibernate基础配置

1、  src目录下的applicationContext.xml,移动到resources源文件夹并改名为applicationContextSessionFactory.xml

2、  resources源文件夹中,新建applicationContextDao.xml文件。

3、  在配置文件applicationContextSessionFactory.xml中配置ID为“dataSource”的数据源

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

       destroy-method="close">

<property name="driverClassName"

            value="com.microsoft.jdbc.sqlserver.SQLServerDriver"/>

<property name="url"  value="jdbc:Microsoft:sqlserver://localhost:1433;databaseName=shopping;SelectMethod=cursor"/>

        <property name="username" value="sa"/>

        <property name="password" value=""/>

</bean>

 

4、  在配置文件applicationContextSessionFactory.xml中配置SessionFactory

<bean id="sessionFactory"

class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="mappingDirectoryLocations">

<list>

<!-- 配置基础业务组件-->

<value>classpath:/com/newer/business/pojo/hbm/</value>

</list>

</property>

<property name="hibernateProperties">

<props>

<prop key="hibernate.dialect">

org.hibernate.dialect.SQLServerDialect</prop>

<prop key="hibernate.show_sql">true</prop>

</props>

</property>

</bean>

 

3.2.2  开发测试基类BaseSpringTest

1、  BaseSpringTest存放于test源文件夹中。

2、  类全名为com.newer.business.spring.BaseSpringTest

3、  编写getBeanFactory方法,实现将配文件

applicationContextSessionFactory.xmlapplicationContextDao.xml,实例化为ClassPathXmlApplicationContext工厂。

/**

 * 测试基类

 * @author 杨柯

*/

public class BaseSpringTest {

  public BeanFactory getBeanFactory(){

      return new ClassPathXmlApplicationContext(

              new String[]{"applicationContextSessionFactory.xml",

                           "applicationContextDao.xml"});

  }

}

4、  编写子类TestHiberateSessionFactory,继承于BaseSpringTest

5、  TestHiberateSessionFactory在测试类中编写testSessionFactory方法,在此方法中通过父类的getBeanFactory方法来取得BeanFactory,从而获取SessionFactory进行测试。示例代码如下:

public class TestHibernateSessionFactory

                                    extends BaseSpringTest {

    public void testSessionFactory(){

        BeanFactory factory=this.getBeanFactory();

        SessionFactory sessionFactory=(SessionFactory)

                            factory.getBean("sessionFactory");

        Session session=sessionFactory.openSession();

        System.out.println(session);

    }

}

 

 

3.2.3  利用SpringAOP配置Hibernate事务管理机制

1、  applicationContextDao.xml文件中加入Hibernate事务管理器配置。

<bean id="myHibTransactionManager"

class="org.springframework.orm.hibernate3.HibernateTransactionManager">

        <property name="sessionFactory" ref="sessionFactory" />

</bean>

 

2、  applicationContextDao.xml文件中加入事务代理工厂类配置

<bean id="baseTransProxy"  abstract="true"

class=" org.springframework.transaction.interceptor.TransactionProxyFactoryBean">

<property name="transactionManager" ref="myHibTransactionManager" />

        <property name="proxyTargetClass" value="true"/>

        <property name="transactionAttributes">

            <props>

                <prop key="add*">PROPAGATION_REQUIRED</prop>

                <prop key=" del *">PROPAGATION_REQUIRED</prop>

                <prop key="update*">PROPAGATION_REQUIRED</prop>

                <prop key="save*">PROPAGATION_REQUIRED</prop>

                <prop key="do*">PROPAGATION_REQUIRED</prop>

                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>

            </props>

        </property>

    </bean>

 

3.2.4  开发用户管理数据访问组件

1、  com.newer.businses.dao包中新建UserDao类,继承于

HibernateDaoSupport

2、  利用HibernateDaoSupport 提供的hibernateTemplate  编写以下方法

方法名

作用

add(User user)

用户注册方法

login(String username,String passwork)

用户登录业务处理

delete(long userid)

删除用户信息

 

3、  UserDao加入到applicationContextDao.xml配置中。

    <bean id="userDaoTarget" class="com.newer.business.dao.UserDao">

        <property name="sessionFactory">

            <ref bean="sessionFactory" />

        </property>

    </bean>

 

4、  对上边配置的userDaoTarget类进行事务代理。

    <bean id="userDao" parent="baseTransProxy">

        <property name="target" ref="userDaoTarget" />

    </bean>

5、  test源文件夹中编写子类TestUserDao,继承于BaseSpringTest,对前面第4步开发的userDao中的addlogindelete方法进行测试。

 

3.3        SpringWEB层集成

3.3.1  底层数据访问组件与WEB层集成

1、  将数据访问组件配置到web.xml中,启动底层基础Spring容器,配置如下:

    <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

                    classpath:applicationContextSessionFactory.xml,

                    classpath:applicationContextDao.xml

        </param-value>

    </context-param>

    <!-- 加载与业务有关的底层配  -->

    <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

2、  web.xml中去掉关于启动与关闭HiberanteSessionFactory配置,Hiberante配置由SpringBeanFactory负责启动。

         <listener>

<listener-class>

com.newer.business.web.listener.ContextLoadHibernateSessionListener

</listener-class>

</listener>

3、  web.xml中置配的OpenSessionInView过滤器删除。

  <filter>

<filter-name>openHibernateSessionFilter</filter-name>

<filter-class>

com.newer.business.web.filter.OpenHibernateSessionFilter

</filter-class>

</filter>

<filter-mapping>

<filter-name>openHibernateSessionFilter</filter-name>

<url-pattern>*.do</url-pattern>

</filter-mapping>

4、  web.xml中加入Spring提供的OpenSessionInView过滤器。

    <filter>

        <filter-name>openSession</filter-name>

        <filter-class>

            org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

        </filter-class>

    </filter>

    <filter-mapping>

        <filter-name>openSession</filter-name>

        <url-pattern>*.do</url-pattern>

    </filter-mapping>

5、  修改Struts强化训练中开发的LoginAction代码,改变数据访问Dao调用方式为从web.xml配置的Spring BeanFactory中获取。

    WebApplicationContext context=WebApplicationContextUtils       

.getWebApplicationContext(request.getSession().getServletContext());

    UserDao userDao=(UserDao)context.getBean("userDao");

    User user=userDao.login(userName, passWord);

6、   启动WEB工程,进行登录测试。

 

3.3.2  StrutsActionSpring容器托管

1、  WEB-INF文件夹下新建下Spring的配置文件,文件名为spring-config.xml

2、  修改LoginAction类加入如下代码,为注入UserDao提供set方法。

public class LoginAction extends Action {

    protected UserDao userDao;

    public void setUserDao(UserDao userDao) {

        this.userDao = userDao;

    }

    }

3、  spring-config.xml中加入LoginAction的配置,并为LoginAction注入userDao

     <bean name="/login"

        class="com.newer.struts.action.UserAction">

        <property name="userDao">

            <ref bean="userDao" />

        </property>

    </bean>

注意:

结点中name的属性值”/login”struts配置文件中action结点的path的值相同。

4、  struts-config.xml中加入ContextLoaderPlugIn插件,启动新的Spring ApplicationContext专用来管理StrutsAction类。

  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

    <set-property property="contextConfigLocation"

                  value="/WEB-INF/spring-config.xml"/>

  </plug-in>

5、  覆盖StrutsRequestProcessor

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor">

6、  启动WEB服务器,测试登录。

 

3.3.3  进一步改版商品管理业务模块

1、  3.2.4 的步骤,修改商品管理相关的其它Dao类,并加入到配置文件applicationContextDao.xml中。

2、  WEB-INF/config文件夹下新建下Spring的配置文件,文件名为spring-config-product.xml。请注意文件的命名规则与struts多模块命名在规则相似,文件存放的位置与struts配置文件路径保持一至。

3、  3.3.2 的第二小步改写相应的Action类。

4、  3.3.2 的第三小步将本业务模块相对应的Acton类配置写入到

spring-config-product.xml文件中,配置如下:

     <bean name="/product/productservice"

        class="com.newer.business.web.action.product.ProductManagerAction">

        ......

    </bean>

注意:

结点中name的属性值”/product/productservice”struts配置文件中action结点的path的值”/productservice”不相同,多出的”/product”部分正好为本业务模块在Struts中配置的模块名称。

 

5、  3.3.2 的第二、三小步配置,将本模块的ActionSpring托管。

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

  <set-property property="contextConfigLocation"

                value="/WEB-INF/config/spring-config-product.xml"/>

 </plug-in>

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor">

6、  启动WEB服务器,测试相应的功能,直至所有的业务改版完成。

3.4        SSH集成总结

前面的训练过程,我们建立的ApplicationContext容器型成了如下的结构。

1、  我们在web.xml中配置的Spring容器即是1对应的ApplactionContext

<context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

                    classpath:applicationContextSessionFactory.xml,

                    classpath:applicationContextDao.xml

        </param-value>

    </context-param>

    <!-- 加载与业务有关的底层配  -->

    <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

 

2、  234等对应的ApplactionContext,则是在各个Struts模块中配置ContextLoaderPlugInPlugin

  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

    <set-property property="contextConfigLocation"

                  value="/WEB-INF/spring-config.xml"/>

  </plug-in>

 

 

<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">

    <set-property property="contextConfigLocation"

                  value="/WEB-INF/spring-config.xml"/>

 </plug-in>

 

3、  当请求某个业务模块的Action类时,Struts会从当前模块的Spring容器中查找相应的Action类。

4、  Action类需要Dao类进行数据访问时,会在当前的Spring容器中找查,如查没有找到,则会自动到父级的Spring容器中查找即web.xml中查找。这样的情况使得基础的数据访问可以被各个业务模块共享。

 

---------------判断用户登陆,创建一个基类BaseAction

public abstract class BaseAction extends DispatchAction {

    public static String USER_IN_SESSION="user_in_session";

   

    public String getUser(HttpServletRequest request){

            String userName=(String)request.getSession().getAttribute(USER_IN_SESSION);

            return userName;

    }

    public ActionForward execute(ActionMapping mapping, ActionForm form,

            HttpServletRequest request, HttpServletResponse response)

            throws Exception {

           String userName=getUser(request);

           if(userName==null||"".equals(userName)){

                  return new ActionForward("login");

           }

          

           return super.execute(mapping, form, request, response);

    }

    public Session getHibernateSession(HttpServletRequest request){

           return (Session)request.getAttribute(OpenHibernateSessionInView.HIBERNATE_SESSIN_KEY);

    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值