java高級框架應用開發(fā)案例教程十二_第1頁
java高級框架應用開發(fā)案例教程十二_第2頁
java高級框架應用開發(fā)案例教程十二_第3頁
java高級框架應用開發(fā)案例教程十二_第4頁
java高級框架應用開發(fā)案例教程十二_第5頁
已閱讀5頁,還剩46頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java高級框架應用開發(fā)案例教程(十二)

Struts-Spring-Hibernate集成

主要內容12.1環(huán)境搭建和基本配置12.2Spring和Hibernate集成12.3Spring和Struts集成12.4項目案例12.1環(huán)境搭建和基本配置12.1環(huán)境搭建和基本配置

我們在Eclipse中可以增加對Struts2.0,Spring2.0,Hibernate3.1的支持,具體如下:1.完成MyEclipse、MySQL和Tomcat工具的安裝與配置(參考1.3.2一節(jié))2.使用MyEclipse搭建簡單的Struts2Web工程1)下載和安裝Struts2框架

在此下載struts-2.0.11-all完整包,里面包括apps(示例)、docs(文檔)、j4(struts2支持jdk1.4的jar文件)、lib(核心類庫及struts2第三方插件類庫)、src(源

代碼)。2)創(chuàng)建web工程,添加jar包將下載資源包中l(wèi)ib下的struts2-core-2.0.11.jar、xwork-2.0.4.jar和ognl-2.6.11.jar

(三個為必須jar包)添加,就可以開發(fā)應用,但是會有錯誤消息。添加commons-logging-1.04.jar和freemarker-2.3.8.jar就不會報錯。12.1環(huán)境搭建和基本配置3)編輯web.xml文件,配置struts2的核心Filter<?xmlversion="1.0"encoding="UTF-8"?><web-appversion="2.4" xmlns="" xmlns:xsi="" xsi:schemaLocation=" /web-app_2_4.xsd"> <display-name>ssh</display-name><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>

<e-file-list> <e-file>index.jsp</e-file> <e-file>login.jsp</e-file></e-file-list></web-app>12.1環(huán)境搭建和基本配置4)寫用戶請求jsp<%@pagelanguage="java"contentType="text/html;charset=utf-8"%><html><head><title>登陸頁面</title></head><body><h3>用戶登陸</h3><formaction="login.action"method="post"><table><tralign="center"><td>用戶名:<inputtype="text"name="username"/></td></tr><tralign="center"><td>密

碼:<inputtype="password"name="password"/></td></tr><tralign="center"><tdcolspan="2"><inputtype="submit"value="提交"/><inputtype="reset"value="重置"/></td></tr></table></form></body>12.1環(huán)境搭建和基本配置5)寫Action類packagecom.ascent.struts2.action;publicclassLoginAction{ privateStringusername; privateStringpassword; publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringexecute(){if(getUsername().equals("liang")&&getPassword().equals("liang")){ return"success"; } return"error"; }}12.1環(huán)境搭建和基本配置6)在src下寫struts.xml<?xmlversion="1.0"encoding="GBK"?><!DOCTYPEstrutsPUBLIC"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN""">

<struts><packagename="struts2_ssh"extends="struts-default"><actionname="login"class="com.ascent.struts2.action.LoginAction"><resultname="error">/error.jsp</result><resultname="success">e.jsp</result></action></package></struts>12.1環(huán)境搭建和基本配置7)添加error.jsp和e.jsperror.jsp<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><basehref="<%=basePath%>">

<title>MyJSP'error.jsp'startingpage</title></head>

<body> 登陸失??!</body></html>12.1環(huán)境搭建和基本配置e.jsp<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html><head><basehref="<%=basePath%>"><title>MyJSP'e.jsp'startingpage</title>

</head><body> 歡迎您,登陸成功!</body></html>8)部署和啟動,進行測試。12.1環(huán)境搭建和基本配置3.添加Spring2.0支持,整合Spring2.01)右鍵工程名,選擇MyEclipse->AddSpringCapabilities…打開添加spring支持配置頁面,如圖12-1所示。12.1環(huán)境搭建和基本配置2)打開如下配置頁面,進行配置,如圖12-2所示。選擇spring2.0,勾取spring2.0支持包,要選擇Spring2.0ORM/DAO/Hibernate3Libraries,選擇CopycheckedLibratycontentstoprojectfolder(TLDsalwayscopied),并將其拷貝到路徑為/WebRoot/WEB-INF/lib,然后選擇Next,進行下一步設置。12.1環(huán)境搭建和基本配置3)進入application生成頁面,如圖12-3所示。選擇New,Folder選擇工程下的WebRoot/WEB-INF,File為applicationContext.xml,最后點擊Finish完成對Spring2.0的添加。12.1環(huán)境搭建和基本配置4)上面3步添加了spring2.0支持,還需要將spring2.0和struts2.0整合在一起,需要添加struts2-spring-plugin-2.0.11.jar插件,需要在web.xml中配置spring初始化監(jiān)聽,如下代碼:<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>插件添加很簡單,將下載的struts2的資源包中的lib下的struts2-spring-plugin-2.0.11.jar拷貝到工程的lib下即可。完成上述工作,Spring的IoC容器會在Web應用啟動時完成初始化,且成為Struts2框架的默認的objectFactory。12.1環(huán)境搭建和基本配置4.添加Hibernate3.1支持,整合Hibernate3.11)添加工程的包結構,分別為DAO和PO的類包,如圖12-4所示。12.1環(huán)境搭建和基本配置2)添加Hibernate3.1支持,右鍵工程->MyEclipse->AddHibernateCapabilities…,如圖12-5所示。12.1環(huán)境搭建和基本配置3)進入配置頁面,進行如下步驟配置,如圖12-6所示。選擇Hibernate3.1,勾取支持Libraries,選擇CopycheckedLibraryJarstoprojectfolderandaddtobuild-path,Libraryfolder路徑為WebRoot/WEB-INF/lib,選擇Next。12.1環(huán)境搭建和基本配置4)選擇Springconfigurationfile(applicationContext.xml),將hibernate連接庫的操作交給Spring來控制,然后Next,如圖12-7所示。12.1環(huán)境搭建和基本配置5)選擇ExistingSpringconfigurationfile,為前配置好的Spring配置文件,SessionFactionID寫為sessionFactory,為hibernate產生連接的bean的id,如圖12-8所示。然后Next12.1環(huán)境搭建和基本配置6)設置數據源,填寫B(tài)eanId為dataSource,選擇JDBC,DBDriver為設置好的mysqldriver,如圖12-9所示。然選擇Next12.1環(huán)境搭建和基本配置7)取消創(chuàng)建sessinFactoryclass,不勾取,因為前面已經將sessionFactory交給了Spring來產生,如圖12-10所示。下圖配置,然后finishi完成hibernate支持的添加。12.1環(huán)境搭建和基本配置8)點擊finish出現如下窗口,選擇KeepExisting,如圖12-11所示。12.1環(huán)境搭建和基本配置9)完成后applicationContext.xml中已經添加了數據源和sessionFactory的配置,如下:<?xmlversion="1.0"encoding="UTF-8"?><beans xmlns="" xmlns:xsi="" xsi:schemaLocation="/spring-beans-2.0.xsd"> <beanid="dataSource" class="mons.dbcp.BasicDataSource"> <propertyname="driverClassName" value="com.mysql.jdbc.Driver"> </property> <propertyname="url" value="jdbc:mysql://localhost:3306/acesys"> </property> <propertyname="username"value="root"></property> <propertyname="password"value="root"></property> </bean>

12.1環(huán)境搭建和基本配置<beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="dataSource"> <refbean="dataSource"/> </property> <propertyname="hibernateProperties"> <props> <propkey="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> </props> </property> </bean></beans>12.1環(huán)境搭建和基本配置10)此時,已經完成了Hibernate3.1的添加,其他hibernate映射具體看struts2與hibernate整合的章節(jié)。提示:完成了struts2.0、spring2.0和hibernate3.1的添加與整合,重新啟動工程,驗證連接程序時會出現如下錯誤:啟動Tomcat,又有新的錯誤;

嚴重:UnabletoinitializeStrutsActionServletduetoanunexpectedexceptionorerrorthrown,somarkingtheservletasunavailable.

Mostlikely,thisisduetoanincorrectormissinglibrarydependency.

java.lang.NoClassDefFoundError:mons/pool/impl/GenericObjectPool

atjava.lang.Class.getDeclaredConstructors0(NativeMethod)

解決辦法:到

下載commons-pool-1.3.zip,把里面的commons-pool-1.3.jar放到Tomcat目錄下的lib文件夾!Tomcat6版本中有commons-dbcp.jar包,就不會出現上述錯誤。12.1環(huán)境搭建和基本配置再次啟動,可能還會報下面的錯誤:java.lang.NoSuchMethodError:org.objectweb.asm.ClassVisitor.visit

2007-08-0815:36:17,406ERROR[xy.BasicLazyInitializer]-CGLIBEnhancementfailed:dao.User

java.lang.NoSuchMethodError:org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

atnet.sf.cglib.core.ClassEmitter.begin_class(ClassEmitter.java:77)Spring和Hibernate共用的一些jar文件發(fā)生了版本沖突,刪除WEB-INF/lib/asm-2.2.3.jar然后重啟Tomcat.至此我們完成了Eclipse對Struts2.0,Spring2.0,Hibernate3.1的支持。12.2Spring和Hibernate集成12.2Spring和Hibernate集成我們前面提到,Spring與hibernate的集成實際上是通過applicationContext.xml配置文件完成的。關于如何使用Hibernate來對數據庫表做映射我們在前面已經做了介紹,這里我們關心的是如何配置Spring使它能管理Hibernate。其實只要在Spring的配置文件(我們這里是applicationContext.xml)中配置一個叫作sessionFactory的bean,Spring就可以和Hibernate聯(lián)系起來了。而sessionFactory會應用dataSource的bean,它代表的是數據源信息。如下所示:<beanid="dataSource" class="mons.dbcp.BasicDataSource"> <propertyname="driverClassName" value="com.mysql.jdbc.Driver"> </property> <propertyname="url" value="jdbc:mysql://localhost:3306/acesys"> </property> <propertyname="username"value="root"></property> <propertyname="password"value="root"></property> </bean>12.2Spring和Hibernate集成<beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="dataSource"> <refbean="dataSource"/> </property> <propertyname="hibernateProperties"> <props> <propkey="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <propkey="show_sql">true</prop> </props> </property> <propertyname="mappingResources"> <list> <value>com/ascent/po/Usr.hbm.xml</value> </list> </property></bean>12.2Spring和Hibernate集成這樣Spring和Hibernate的第一步整合就完成了,現在到了關鍵的地方,也就是如何讓Spring和Hibernate雙劍合璧來實現業(yè)務邏輯呢?還是在applicationContext.xml文件中我們做了一個配置:<beanid="usrDAO" class="com.ascent.dao.impl.UsrDAOImpl"abstract="false" lazy-init="default"autowire="default"dependency-check="default"> <propertyname="sessionFactory"> <reflocal="sessionFactory"/> </property> </bean> <beanid="usrService" class="com.ascent.service.impl.UsrServiceImpl" abstract="false"lazy-init="default"autowire="default" dependency-check="default"> <propertyname="usrDAO"> <reflocal="usrDAO"/> </property> </bean>12.2Spring和Hibernate集成在上面你大概可以感覺到Spring給我們帶來的好處了,Spring的IoC模式可以統(tǒng)一管理各層,而又使各層松散耦合在一起。使各層之間實現最大的解耦性,這也是Web架構一貫的追求。但是,Spring帶來的好處還不止于此,除了IoC還有AOP,Spring可以運用AOP來實現很多功能,最常用的就是事務處理。這里我們用了業(yè)務服務(businessservice)層和數據存取對象(DataAccessObject)層,在businessservice層我們增加事務處理,DAO(DataAccessObject)層負責數據讀寫首先組裝配置好聲明式事務處理的Beans,<beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"><propertyname="sessionFactory"ref="sessionFactory"/></bean><beanid="transactionInterceptor"class="erceptor.TransactionInterceptor"> <!--事務攔截器bean需要依賴注入一個事務管理器--><propertyname="transactionManager"ref="transactionManager"/> <propertyname="transactionAttributes"> <!--下面定義事務傳播屬性--> <props> <propkey="find*,get*">PROPAGATION_REQUIRED,readOnly</prop> <propkey="save*,update*,delete*">PROPAGATION_REQUIRED</prop> </props> </property> </bean>12.2Spring和Hibernate集成之后需要把BusinessServiceObject和DAO也組裝起來,并把這些對象配到一個事務管理器(transactionmanager)里。在Spring中的配置信息還有以下內容:<!--定義BeanNameAutoProxyCreator--><beanclass="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <!--指定對滿足哪些beanname的bean自動生成業(yè)務代理--> <propertyname="beanNames"><!--下面是所有需要自動創(chuàng)建事務代理的bean--><list><value>usrService</value></list><!--此處可增加其他需要自動創(chuàng)建事務代理的bean--> </property><!--下面定義BeanNameAutoProxyCreator所需的事務攔截器--><propertyname="interceptorNames"><list><!--此處可增加其他新的Interceptor--><value>transactionInterceptor</value></list></property></bean> 12.2Spring和Hibernate集成理解了以上的配置,我們就建立了整體框架,下面我們來進行具體代碼實現。首先開發(fā)我們的DAO類吧。先說明一點,由于Spring是提倡面向接口編程的,所以我們先為每個DAO類都定義一個接口.:例如,com/ascent/dao目錄下的UsrDAO是業(yè)務接口,而com/ascent/dao/impl目錄下的UsrDAOImpl是業(yè)務接口的實現類。在DAO的實現中,我們使用了Spring對Hibernate的集成類:HibernateTemplate.典型的應用經常會被重復的資源管理代碼搞亂。很多項目嘗試創(chuàng)造自己的方案解決這個問題,有時會為了編程方便犧牲適當的故障處理。對于恰當的資源處理Spring提倡令人矚目的簡單的解決方案:使用templating的IoC,比如基礎的class和回調接口,或者提供AOP攔截器?;A的類負責固定的資源處理,以及將特定的異常轉換為unchecked異常體系。Spring引進了DAO異常體系,可適用于任何數據訪問策略。Spring提供了對Hibernate的支持:HibernateTemplate,HibernateInterceptor,以及一個Hibernatetransactionmanager。這樣做的主要目的是:能夠清晰地劃分應用層次而不管使用何種數據訪問和事務技術;使應用對象之間的耦合松散。業(yè)務對象(BusinessObject)不再依賴于數據訪問和事務策略;不再有硬編碼的資源查找(lookup);不再有難于替換的單點模式(singletons);不再有自定義的服務注冊。一個簡單且堅固的方案連接了應用對象,并且使它們可重用盡可能地不依賴容器。雖然所有的數據訪問技術都能獨立使用,但是與Springapplicationcontext結合更好一些,它提供了基于xml的配置和普通的與Spring無關的JavaBean實例。在典型的Spring應用中,很多重要的對象都是JavaBeans:數據訪問template,數據訪問對象(使用template),transactionmanagers,業(yè)務對象(使用數據訪問對象和transactionmanagers),webviewresolvers,webcontroller(使用業(yè)務對象)等等。代碼如下:12.2Spring和Hibernate集成packagecom.ascent.dao;importjava.util.ArrayList;importjava.util.List;importcom.ascent.po.Usr;publicinterfaceUsrDAO{ //注冊 publicUsrsaveUsr(Usrusr); //按用戶名查用戶 publicUsrfindByUserName(Stringusername); //用戶登錄驗證的方法 publicUsrcheckUsr(Stringusername,Stringpassword); // 查詢所有用戶 publicListfindAll(); //返回查詢所有行分頁 publicintgetTotalRows(); //查詢分頁設置數量的數據集合 publicArrayListgetData(Stringsql,intfirstRow,intmaxRow);// 按主鍵查詢用戶 publicUsrfindById(Stringuid); //刪除用戶 publicbooleandeleteUsr(Stringuid); //修改用戶信息 publicbooleanupdateUsr(Usrusr);}12.2Spring和Hibernate集成UsrDAOImpl.Java代碼:packagecom.ascent.dao.impl;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;importorg.apache.log4j.LogManager;importorg.apache.log4j.Logger;importorg.hibernate.HibernateException;importorg.hibernate.Query;importorg.hibernate.Session;importorg.springframework.orm.hibernate3.HibernateCallback;importorg.springframework.orm.hibernate3.support.HibernateDaoSupport;importcom.ascent.dao.UsrDAO;importcom.ascent.po.Usr;publicclassUsrDAOImplextendsHibernateDaoSupportimplements UsrDAO{privatestaticfinalLoggerLOGGER=LogManager.getLogger(UsrDAOImpl.class);12.2Spring和Hibernate集成/** *注冊Usr方法實現 */ publicUsrsaveUsr(Usrusr){ try{ this.getHibernateTemplate().save(usr); LOGGER.debug("保存用戶信息到數據庫成功!"); returnusr; }catch(Exceptione){ LOGGER.debug("保存用戶信息到數據庫失??!"); e.printStackTrace(); returnnull; } }12.2Spring和Hibernate集成 /** *根據用戶名查詢Usr *返回類型是Usr,以備查詢用戶有需要得到其他信息,所以返回該對象 *當返回是null,說明該用戶名的用戶庫中不存在,可以用來注冊 */ publicUsrfindByUserName(Stringusername){ Stringsql="fromUsruwhereu.username=?"; Listlist=this.getHibernateTemplate().find(sql,username); if(list.size()>0){ LOGGER.debug("根據用戶名查詢到用戶!"); return(Usr)list.get(0); } LOGGER.debug("根據用戶名未查詢到用戶!"); returnnull; }12.2Spring和Hibernate集成 /** *用戶登錄驗證的方法delFlag為0標志正??墒褂糜脩?*/ publicUsrcheckUsr(Stringusername,Stringpassword){ Stringsql="fromUsruwhereu.username=?andu.password=?andu.delsoft='0'"; Listlist=this.getHibernateTemplate().find(sql,newString[]{username,password}); if(list.size()>0){ LOGGER.debug("登錄用戶信息正確!"); return(Usr)list.get(0); } LOGGER.debug("登錄用戶信息不正確,沒有該用戶!"); returnnull; }12.2Spring和Hibernate集成publicListfindAll(){ Listlist=newArrayList(); Listl=this.getHibernateTemplate().find("fromUsruorderbyu.id"); Iteratorit=l.iterator(); while(it.hasNext()){ Usru=(Usr)it.next(); //u.setTemp4("<inputtype=\"checkbox\"name=\"infoid\"value=\""+u.getId()+"\">"); list.add(u); } returnlist; } //查詢總行數分頁查詢所有用戶包括delsoft為1的標志刪除用戶 publicintgetTotalRows(){ Stringsql="fromUsruorderbyu.id"; inttotalRows=this.getHibernateTemplate().find(sql).size(); LOGGER.debug("返回所有用戶總數!"); returntotalRows; }12.2Spring和Hibernate集成 /** *@paramsql查詢條件 *@paramfirstRow第一條記錄位置 *@parammaxRow查詢幾條 *@returnlist返回查詢一頁記錄的集合 */ publicArrayListgetData(finalStringsql,finalintfirstRow,finalintmaxRow){ return(ArrayList)this.getHibernateTemplate().executeFind(newHibernateCallback(){ publicObjectdoInHibernate(Sessionsession)throwsSQLException,HibernateException{ Queryq=session.createQuery(sql); q.setFirstResult(firstRow); q.setMaxResults(maxRow); ArrayListdata=(ArrayList)q.list(); LOGGER.debug("返回用戶記錄集合!"); returndata; } }); }12.2Spring和Hibernate集成//刪除用戶需求中為軟刪除所以可能不用delete方法 publicbooleandeleteUsr(Stringuid){ Usru=(Usr)this.getHibernateTemplate().load(Usr.class,newInteger(uid)); this.getHibernateTemplate().delete(u); returntrue; } //根據uid查詢用戶 publicUsrfindById(Stringuid){ Usru=(Usr)(this.getHibernateTemplate().find("fromUsruwhereu.id=?",newInteger(uid))).get(0); LOGGER.debug("根據用戶id查詢到用戶!"); returnu; } //修改用戶信息 publicbooleanupdateUsr(Usrusr){ this.getHibernateTemplate().saveOrUpdate(usr); LOGGER.debug("修改用戶信息成功!"); returntrue; }

}12.2Spring和Hibernate集成service的接口及實現如下:packagecom.ascent.service;importjava.util.ArrayList;importjava.util.List;importcom.ascent.po.Usr;publicinterfaceUsrService{ publicUsrsaveUsr(Usrusr);//注冊方法 //按照姓名查詢方法 publicUsrfindByUserName(Stringusername); //用戶登錄驗證的方法 publicUsrcheckUsr(Stringusername,Stringpassword); publicListfindAll();//查詢所有用戶// 返回查詢所有行分頁 publicintgetTotalRows(); //查詢分頁設置數量的數據 publicArrayListgetData(finalStringsql,finalintfirstRow,finalintmaxRow); //按主鍵查詢用戶 publicUsrfindById(Stringuid); //刪除用戶 publicbooleandeleteUsr(Stringuid); //修改用戶信息 publicbooleanupdateUsr(Usrusr);}12.2Spring和Hibernate集成UsrServiceImpl.java代碼:packagecom.ascent.service.impl;importjava.util.ArrayList;importjava.util.List;importcom.ascent.dao.UsrDAO;importcom.ascent.po.Usr;importcom.ascent.service.UsrService;publicclassUsrServiceImplimplementsUsrService{ privateUsrDAOusrDAO; publicvoidsetUsrDAO(UsrDAOusrDAO){ this.usrDAO=usrDAO; } publicUsrsaveUsr(Usrusr){ returnusrDAO.saveUsr(usr); } publicUsrfindByUserName(Stringusername){ returnusrDAO.findByUserName(username); }12.2Spring和Hibernate集成publicUsrcheckUsr(Stringusername,Stringpassword){ returnusrDAO.checkUsr(username,password); } publicListfindAll(){ returnusrDAO.findAll(); } publicArrayListgetData(Stringsql,intfirstRow,intmaxRow){ returnusrDAO.getData(sql,firstRow,maxRow); } publicintgetTotalRows(){ returnusrDAO.getTotalRows(); } publicbooleandeleteUsr(Stringuid){ returnusrDAO.deleteUsr(uid); } publicUsrfindById(Stringuid){ returnusrDAO.findById(uid); } publicbooleanupdateUsr(Usrusr){ returnusrDAO.updateUsr(usr); }}12.3Spring和struts集成12.3Spring和Struts集成Spring和Struts的整合有很多種方式,如下三種解決方案,可以做為參考:

1.使用Spring的ActionSupport類整合Struts2.使用Spring的DelegatingRequestProcessor覆蓋Struts的RequestProcessor3.將StrutsAction管理委托給Spring框架我們這里使用的是第三種方式,也就是通過IoC模式讓Spring對Struts的Action進行管理,并且我們這里使用了Spring的自動裝配功能。先建立一個BaseAction,它繼承了Action類,而其它自定義的Action都要繼承這個BaseActionpackagecom.ascent.struts2.action;importcom.ascent.service.UsrService;importcom.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")publicclassBaseActionextendsActionSupport{ //BaseAction中定義service接口,所有Action繼承該父類,不用每個Action中都得引入了 protectedUsrServiceusrService; publicUsrServicegetUsrService(){ returnusrService; } publicvoidsetUsrService(UsrServiceusrService){ this.usrService=usrService; }}12.3Spring和struts集成LoginAction代碼如下:packagecom.ascent.struts2.action;importcom.ascent.po.Usr;publicclassLoginActionextendsBaseAction{ privateStringusername; privateStringpassword;

publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; }12.3Spring和struts集成publicStringexecute(){ /**沒有spring時代碼 if(getUsername().equals("liang")&&getPassword().equals("liang")){ return"success"; } return"error";*/

/** *有了spring后直接使用注入的usrService */ Usru=this.usrService.checkUsr(username,password); if(u!=null){ returnSUCCESS; } return ERROR; }}12.3Spring和struts集成一般情況下,我們使用Spring的IoC功能將業(yè)務邏輯Service組件注入到Action對象中,這時需要在applicationContext.xml中進行配置,例如以下片段:

<beanid="LoginAction"class="com.ascent.struts2.action.LoginAction"scope="prototype"><!--依賴注入業(yè)務邏輯Service組件--><propertyname="usrService"reflocal="usrService"/></property></bean><beanid="usrService" class="com.ascent.service.impl.UsrServiceImpl" abstract="false"lazy-init="default"autowire="default" dependency-check="default"> <propertyname="usrDAO">

溫馨提示

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

評論

0/150

提交評論