1. 程式人生 > >ssh整合

ssh整合

通過 one isolation cto page point property 實現 ntc

一、功能:以登陸為例講解Spring、Hiberante和struts框架整合。

二、整合流程

1. 在 WEB 環境下使用 Spring

①. 加入spring的 jar 包:

  Spring中提供web支持的包有:spring-web-4.0.0.RELEASE.jar和spring-webmvc-4.0.0.RELEASE.jar

②. Spring 的配置文件,和非 WEB 環境沒有什麽不同

註意:

加入事務管理

<!-- 事務管理器 -->
<bean name="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"
> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 使用aop引入事務管理器 --> <tx:advice id="testAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED" isolation
="DEFAULT"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.silvan.dao.*.*(..))" id="pointcut"/> <aop:advisor advice-ref="testAdvice" pointcut-ref="pointcut"/> </aop:config>

③. 需要在 web.xml 文件中加入如下配置:

<!-- 配置 Spring 配置文件的名稱和位置 -->
<context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- 啟動 IOC 容器的 ServletContextListener -->
<listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

2. Spring 如何整合 hibernate ?

1)加入hibernate的jar包

2)對pojo對象書寫對應的hbm文件

  如:User.hbm.xml

3)在spring配置文件中加入數據源配置

 <!-- 配置數據源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"> </property>
    <property name="url" value="jdbc:oracle:thin:@localhost:1521:silvan"> </property>
    <property name="username" value="scott"></property>
    <property name="password" value="tiger"></property>
</bean>

4)在spring配置文件中加入session工廠管理:需要引入數據源,hbm文件,hibernate屬性

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
       <property name="dataSource" ref="dataSource"></property>
       <!-- 用來列出全部映射文件 -->
       <property name="mappingResources">
           <!-- *.hbm.xml -->
           <list>
              <value>com/silvan/pojo/User.hbm.xml</value>
           </list>
       </property>

       <!-- 定義Hibernate的SessionFactory屬性 -->
       <property name="hibernateProperties">
           <props>
              <!-- 默認情況下該值是為auto的,在classpath下尋找bean-validation**包 -->
              <prop key="javax.persistence.validation.mode">none</prop>
              <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
              <prop key="hibernate.hbm2ddl.auto">update</prop>
              <prop key="hibernate.show_sql">true</prop>
           </props>
       </property>
    </bean>

5)在spring配置文件中配置hql操作對象hibernateTemplate ,供dao使用

<!-- 配置hibernateTemplate -->
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory"></property>
</bean>

3. Spring 如何整合 Struts2 ?

1). 整合目標 ? 使 IOC 容器來管理 Struts2 的 Action!

2). 如何進行整合 ?

①. 正常加入 Struts2:

加入struts的jar包,

創建struts.xml,action,頁面三個部分對應的文件

在web文件中加入以下監聽。

<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>

②. 在 Spring 的 IOC 容器中配置 Struts2 的 Action
註意: 在 IOC 容器中配置 Struts2 的 Action 時, 需要配置 scope 屬性, 其值必須為 prototype

<bean id="loginAction" class="com.silvan.action.LoginAction" scope="prototype">
      <property name="loginService" ref="loginService"></property>
</bean>

③. 配置 Struts2 的配置文件: action 節點的 class 屬性需要指向 IOC 容器中該 bean 的 id

<action name="login_login" class="loginAction" method="login">
        <result>/login.jsp</result>
        <result name="index">/index.jsp</result>
</action>

④. 加入 struts2-spring-plugin-2.3.15.3.jar

源代碼:

首先整合spring和hibernate兩個框架:

Spring配置文件Application-common.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

      <!-- 配置數據源 -->
      <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
           <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
           <property name="url" value="jdbc:oracle:thin:@localhost:1521:zhouyq"/>
           <property name="username" value="zhou"></property>
           <property name="password" value="123456"></property>
      </bean>

      <!-- 創建bean工廠 -->
      <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
           <property name="dataSource" ref="dataSource"></property>
           <!-- 用來列出全部映射文件 -->
           <property name="mappingResources">
                 <!-- *.hbm.xml -->
                 <list>
                      <value>com/silvan/pojo/User.hbm.xml</value>
                 </list>
           </property>

           <!-- 定義Hibernate的SessionFactory屬性 -->
           <property name="hibernateProperties">
                 <props>
                      <!-- javax.persistence.validation.mode默認情況下是auto的,
                            就是說如果不設置的話它是會自動去你的classpath下面找一個bean-validation**包,
                            但是找不到,所以報錯。 -->
                      <prop key="javax.persistence.validation.mode">none</prop>
                      <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                      <prop key="hibernate.hbm2ddl.auto">update</prop>
                      <prop key="hibernate.show_sql">false</prop>
                 </props>
           </property>
      </bean>

      <!-- 配置hibernateTemplate
           HibernateTemplate類是Spring提供給我們進行Hibernate持久層操作的類,
它對增刪查改方法進行了封裝,通過這個類我們很方便就能操作數據庫。
      -->

      <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
           <property name="sessionFactory" ref="sessionFactory"></property>
      </bean>

      <!-- 配置Hibernate的局部事務管理器 -->
      <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
           <property name="sessionFactory" ref="sessionFactory"></property>
      </bean>

      <!-- 采用spring中的聲明式事務 -->
      <tx:advice id="transaction" transaction-manager="transactionManager">
           <tx:attributes>
                 <tx:method name="get*" read-only="true" />
                 <tx:method name="*" propagation="REQUIRED" />
           </tx:attributes>
      </tx:advice>

      <aop:config>
           <aop:pointcut id="txPointcut" expression="execution(* com.silvan.daos.*.*(..))" />
           <aop:advisor advice-ref="transaction" pointcut-ref="txPointcut" />
      </aop:config>

      <!-- 為每個Dao的實現類配置一個HibernateTemplate,
           然後在Spring配置文件中進行裝配,這樣就可以使用這個HibernateTemplate進行持久層的操作了 -->
      <bean id="loginDao" class="com.silvan.daos.impl.LoginDaoImpl">
           <property name="hibernateTemplate" ref="hibernateTemplate"></property>
      </bean>

      <!-- 配置業務對象 -->
      <bean id="loginService" class="com.silvan.services.impl.LoginServiceImpl">
           <property name="loginDao" ref="loginDao"></property>
      </bean>

      <!-- 配置action對象
      <bean id="loginAction" class="com.silvan.action.LoginAction" scope="prototype">
           <property name="loginService" ref="loginService"></property>
      </bean>-->
</beans>

數據庫操作類LoginDaoImpl

package com.silvan.daos.impl;
import java.util.List;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.silvan.daos.LoginDao;

public class LoginDaoImpl implements LoginDao {
     private HibernateTemplate hibernateTemplate;
     public HibernateTemplate getHibernateTemplate() {
         return hibernateTemplate;
     }

     public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
         this.hibernateTemplate = hibernateTemplate;
     }
     /**
      * 登陸案例
      */
     public boolean login(String name, String password) {
         List<String> list = (List<String>) hibernateTemplate.find("select u.password from User u where u.name=?", name);
         if (list != null && list.size() > 0) {
              String passwordStr = list.get(0);
              if (passwordStr.equals(password)) {
                   return true;
              }
         }
         return false;
     }
}

ORM映射樣例

<?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>
     <class name="com.silvan.pojo.User" table="t_user">
         <id name="id" >
              <!-- id生成策略:從序列中產生 -->
              <generator class="native">
                     <param name="sequence">m_user_id_sequence</param>
               </generator>
         </id>
         <property name="name" column="t_name"></property>
         <property name="password" column="t_pass"></property>
     </class>
</hibernate-mapping>        

Spring整合struts(需要加入struts2-spring-plugin-2.3.15.1.jar):

Login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
      String path = request.getContextPath();
 %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>login page</title>
  </head>
  <body>
    <form action="login_login" >
      <table>
            <tr>
                  <td>用戶名:</td>
                 <td><input type="text" name="name"/></td>
            </tr>
            <tr>
                  <td>密   碼:</td>
                  <td><input type="text" name="password"/></td>
            </tr>
            <tr>
                  <td colspan="2"><input type="submit" value="登錄" /></td>
            </tr>
      </table>
    </form>
  </body>
</html>

Struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <package name="struts2" extends="struts-default" >
        <action name="*_*" class="{1}Action" method="{2}">
            <result>/index.jsp</result>
            <result name="error_login">/login.jsp</result>
        </action>
    </package>
</struts>

LoginAction

package com.silvan.action;

import com.silvan.services.LoginService;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport{

     private static final long serialVersionUID = 1L;
     private LoginService loginService;
     private String name;
     private String password;

     public String login(){
         if(name==null){
              name="";
         }

         if(password==null){
              password="";
         }

         //action調用service層
         boolean b = loginService.login(name, password);
         if(b){
              return SUCCESS;
         }else{
              return "error_login";
         }
     }}

Web.Xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
     xmlns="http://java.sun.com/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
     http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <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>

    <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value> 
            classpath:Application-*.xml  
        </param-value> 
    </context-param> 
     <listener>
         <listener-class>
              org.springframework.web.context.ContextLoaderListener
         </listener-class>
    </listener>
    <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

在Spring配置文件中加入

<!-- 配置action對象 -->
<bean id="loginAction" class="com.silvan.action.LoginAction" scope="prototype">
     <property name="loginService" ref="loginService"></property>
</bean>

ssh整合