軟件設(shè)計(jì)與體系結(jié)構(gòu)章_第1頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)章_第2頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)章_第3頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)章_第4頁
軟件設(shè)計(jì)與體系結(jié)構(gòu)章_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

SCCE2010課程體系介紹第4章Spring+Struts+Hibernate

回顧Spring和Hibernate集成Spring和Hibernate集成的優(yōu)點(diǎn)SpringDAO用法BaseDAO的寫法本章內(nèi)容SSH集成的優(yōu)點(diǎn)創(chuàng)建ApplicationContext的方式Spring整合StrutsSSH應(yīng)用本章目標(biāo)了解SSH集成的優(yōu)點(diǎn)掌握創(chuàng)建ApplicationContext的兩種方式掌握Spring對(duì)Struts的管理理解SSH注入過程掌握SSH應(yīng)用1.SSH介紹1.1SSH的層次結(jié)構(gòu)企業(yè)級(jí)的J2EE應(yīng)用中,最典型的是三層結(jié)構(gòu)表現(xiàn)層中間層(業(yè)務(wù)邏輯層)數(shù)據(jù)服務(wù)層SSH的層次結(jié)構(gòu)中間層采用流行的Spring+Hibernate為了將控制層與業(yè)務(wù)邏輯層分離,可以進(jìn)行細(xì)分Web層Service層DAO層POSpring的作用貫穿了整個(gè)中間層,將Web層、Service層、DAO層及PO無縫整合1.2SSH的優(yōu)點(diǎn)一個(gè)良好的框架可以讓開發(fā)人員減輕重新建立解決復(fù)雜問題方案的負(fù)擔(dān)和精力;它可以被擴(kuò)展以進(jìn)行內(nèi)部的定制化;并且有來自用戶社區(qū)的強(qiáng)大支持實(shí)現(xiàn)視圖、控制器與模型的分離實(shí)現(xiàn)業(yè)務(wù)邏輯層與持久層的分離2.Spring管理各層的關(guān)系2.1Web服務(wù)的啟動(dòng)過程SpringApplicationContext作為IOC容器,應(yīng)該優(yōu)先加載,加載方式如下ContextLoaderListenerContextLoaderServletWeb服務(wù)的啟動(dòng)過程ContextLoaderListener方式Spring提供了ServletContextListener的一個(gè)實(shí)現(xiàn)類ContextLoaderListener如果只有一個(gè)配置文件applicationContext.xml,web.xml寫法如下<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener>Web服務(wù)的啟動(dòng)過程如果存在多個(gè)配置文件<context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/classes/applicationContext.xml, /WEB-INF/classes/applicationContext_biz_user.xml, /WEB-INF/classes/applicationContext_biz_emp.xml, /WEB-INF/classes/applicationContext_biz_card.xml </param-value></context-param><listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class></listener>配置文件用“,”分隔Web服務(wù)的啟動(dòng)過程多個(gè)配置文件通過classpath加載<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>contextConfigLocation名稱不能變所有以applicationContext開頭的配置文件Web服務(wù)的啟動(dòng)過程ContextLoaderServlet方式Spring提供了一個(gè)特殊的Servlet類ContextLoaderServlet<servlet> <servlet-name>context</servlet-name> <servlet-class> org.springframework.web.context.ContextLoaderServlet </servlet-class> <load-on-startup>1</load-on-startup></servlet>值為1,保證配置文件優(yōu)先加載如果有多個(gè)配置文件,操作方式與ContextLoaderListener相同Web服務(wù)的啟動(dòng)過程web.xml中加載struts的配置方式<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value> /WEB-INF/config/struts-config.xml,</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>一個(gè)Struts配置文件<servlet><servlet-name>action</servlet-name><servlet-class>org.apache.struts.action.ActionServlet</servlet-class><init-param><param-name>config</param-name><param-value> /WEB-INF/config/struts-config.xml, /WEB-INF/config/struts-config-user.xml, /WEB-INF/config/struts-config-employee.xml</param-value></init-param><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>action</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>多個(gè)Struts配置文,用“,”分隔2.2Spring整合Hibernate連接Oracle數(shù)據(jù)庫的方式<propertyname="connection.username">lang</property><propertyname="connection.url"> jdbc:oracle:thin:@localhost:1521:myOracle</property><propertyname="dialect"> org.hibernate.dialect.Oracle9Dialect</property><propertyname="file">myOracle_DB</property><propertyname="connection.password">000000</property><propertyname="connection.driver_class"> oracle.jdbc.driver.OracleDriver</property>連接Oracle的URLOracle的數(shù)據(jù)庫方言O(shè)racle的數(shù)據(jù)庫驅(qū)動(dòng)2.3Spring整合StrutsSpring整合Struts的兩種策略使SpringIOC容器管理Struts的Action采用Spring的ActionSupport類的子類推薦使用SpringIOC容器管理StrutsAction的方式。采用這種方式能充分利用Spring依賴注入的優(yōu)勢(shì),而不必顯式地加載ApplicationContext實(shí)例Spring整合StrutsSpringIOC容器管理Action的方式有兩種使用org.springframework.web.struts.DelegatingRequestProcessor<actionname="userForm"path="/user"scope="request"parameter="method" type="org.springframework.web.struts.DelegatingActionProxy"></action><controllerprocessorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>使用DelegatingRequestProcessor,Action的type元素可以去掉type元素可以去掉Spring整合Struts使用org.springframework.web.struts.DelegatingActionProxy<actionname="userForm"path="/user"scope="request"parameter="method" type="org.springframework.web.struts.DelegatingActionProxy"></action>使用DelegatingActionProxy,無須controller2.4Spring管理依賴關(guān)系Spring管理各組件間的依賴關(guān)系3.SSH應(yīng)用3.1分別添加SSH特性添加Spring和Hibernate的順序要先添加Spring,然后再添加HibernateSSH推薦的添加方式Spring→Hibernate→Struts3.2DAO層DAO的基類BaseDAO及其配置public

classBaseDAOextendsHibernateDaoSupport{ //實(shí)體對(duì)象全路徑名稱,包括包名 privateStringpoName=""; publicListgetObjects(){ ListpoList=null; try{ Stringhql="from"+poName; poList=this.getHibernateTemplate().find(hql); }catch(Exceptione){ e.printStackTrace(); } returnpoList; } public

voidsetPoName(StringpoName){ this.poName=poName; }}對(duì)poName設(shè)置注入查詢所有記錄,其他方法省略DAO層DAO的配置<!--用戶DAO--><beanid="AccountDAO"class="com.hr.g3.dao.user.AccountDAO"> <propertyname="sessionFactory"> <refbean="sessionFactory"/> </property> <propertyname="poName"> <value>com.hr.g3.persist.Account</value> </property></bean>將SessionFactory注入給BaseDAO的HibernateDaoSupport將具體的實(shí)體對(duì)象注入給具體DAO3.3業(yè)務(wù)邏輯層業(yè)務(wù)邏輯層接口publicinterfaceAccountHandler{ publicAccountDAOgetAccountDAO();}publicclassAccountHandlerImplimplementsAccountHandler{ privateAccountDAOaccountDAO; publicAccountDAOgetAccountDAO(){ returnaccountDAO; } publicvoidsetAccountDAO(AccountDAOaccountDAO){ this.accountDAO=accountDAO; } }業(yè)務(wù)邏輯層實(shí)現(xiàn)類業(yè)務(wù)邏輯層業(yè)務(wù)邏輯配置文件<beanid="accountHandlerImpl"class=".user.AccountHandlerImpl"> <propertyname="accountDAO"ref="AccountDAO"></property></bean>將DAO注入給業(yè)務(wù)邏輯類3.4web層ActionForm類publicclassUserFormextendsActionForm{ privateAccountaccount=newAccount();publicAccountgetAccount(){ returnaccount;}publicvoidsetAccount(Accountaccount){ this.account=account;}}用實(shí)體對(duì)象作為ActionForm屬性web層Action類public

classUserActionextendsDispatchAction{private

static

finalLoggerlogger=Logger.getLogger(UserAction.class);//定義用戶管理的業(yè)務(wù)邏輯類privateAccountHandleraccountHandler;public

voidsetAccountHandler(AccountHandleraccountHandler){ this.accountHandler=accountHandler;}//省略Action方法}定義日志定義業(yè)務(wù)邏輯類,為方法注入web層Action類方法publicActionForwardlogin(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){ ActionForwardforward=newActionForward(); UserFormuserForm=(UserForm)form; Accountuser= accountHandler.getAccountDAO().login(userForm.getAccount()); if(user!=null){ request.getSession().setAttribute(“user",user); forward=mapping.findForward("login"); } else{ forward=mapping.findForward("error"); } returnforward;}根據(jù)用戶對(duì)象查詢登錄用戶將用戶對(duì)象放入Session中web層Struts配置文件<action-mappings> <!--用戶登錄--><actionname="userForm"path="/user"scope="request"parameter="method"> <forwardname="login"path="mons/main.jsp"></forward></action></action-mappings><!--使用spring的RequestProcessor,action無須再配置type屬性--><controllerprocessorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>使用DelegatingRequestProcessor,省略action的type元素web層Spring配置文件<beanname="/user"class="com.hr.g3.web.user.action.UserAction"> <propertyname="accountHandler"ref="accountHandlerImpl"> </property></bean>這里必須是name元素,而不是ID元素,name元素值匹配Struts配置文件action的path元素值將業(yè)務(wù)邏輯類注入給actionweb層登錄頁面<html:formaction="/user.do?method=login">userName:<html:textproperty="account.userName"></html:text>password:<html:passwordproperty="account.password"></html:password><html:submitvalue="提交"></html:submit></html:form>web層登錄成功<html:htmllang="true"><head> <title>main.jsp</title></head><body>歡迎${employee.empName}<br>您登錄成功</body></html:html>web層<html:htmllang="true"><head> <title>error.jsp</title></head><body><html:errors/></body></html:html>登錄失敗S2SH-web.xmlweb.xml文件,添加struts2配置,spring配置部分與SSH相同<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping>S2SH-struts.xml在struts.xml文件頭部加上配置

<constantname="struts.objectFactory"value="spring"/><constantname="struts.devMode"value="true"/>在spring配置文件中注入Action類<beanid="XXXAction"class="包名.類名"></bean>在struts配置文件中引用配置<actionname="register"class="XXXAction"></action>當(dāng)發(fā)生請(qǐng)求時(shí)委托spring代理引用spring中注入名稱則名稱相同spring事務(wù)修改applicationContext.xml文件<bean>元素<beansxmlns=""xmlns:xsi=""xmlns:aop=""xmlns:tx=""xsi:schemaLocation="

">spring2事務(wù)添加事務(wù)配置管理器<!--配置事務(wù)管理器--><beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"><refbean="sessionFactory"/></property></bean>spring2事務(wù)添加事務(wù)通知<!--配置事務(wù)的通知--><tx:adviceid="txAdvice"transaction-manager="transactionManager"><tx:attributes><tx:methodname="upd*"propagation="REQUIRED"/><tx:methodname="del*"propagation="REQUIRED"/><tx:methodname="sav*"propagation="REQUIRED"/><tx:methodname="*"propagation="REQUIRES_NEW"/></tx:attributes></tx:advice>每個(gè)method配置是目標(biāo)對(duì)象中連接點(diǎn)的描述,例如以u(píng)pd,sav開頭的方法會(huì)自動(dòng)添加事務(wù)spring2事務(wù)添加事務(wù)代理<aop:config><aop:pointcutid="allManagerMethod"expression="execution(*com.alex.service.*.*(..))"/><aop:advisorpointcut-ref="allManagerMethod"advice-ref="txAdvice"/></aop:config>expression="execution(*com.alex.service.*.*(..))"表達(dá)式是對(duì)那些目標(biāo)對(duì)象擁有事務(wù)的描述(*com.alex.service.*.*(..))有空格表示包表示所有類表示所有方法注意:被注入的目標(biāo)對(duì)象假如向擁有事務(wù),必須有接口(AOP事務(wù)必須面向接口)spring2事務(wù)修改struts.xml文件<constantname="struts.devMode"value="false"/>true:表示出現(xiàn)異常后由struts代理,頁面將不會(huì)出現(xiàn)500錯(cuò)誤false:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論