ssh整合
一、功能:以登陸為例講解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整合