包含:Displaytag、Tiles 、 OpenSessionInView 及 連接DB
資料庫:MS SQL2005
Schema:在\BlankSSH\dev\sql.txt,為了方便說明,僅用兩張Table。
下載: 原始碼 ,可直接從Eclipse import。
SSH架構說明:
src下的folder
action:DispatchDemoAction繼承BaseAction,ExampleAction繼承Action,提供兩種寫法做參考,即可直接get service,不用再呼叫spring WebApplicationContext。
common:共用變數及BaseAction。BaseAction中繼承DispatchAction,也可將seesion處理的方法寫在此。
filter:簡易登入權限設定。
formbean:提供給action使用。
persistence:Hibernate dao,此資料夾階由Myeclipse自動產生。
service:主要的商業邏輯寫在這,依照功能切分不同服務。
ex:MemberService包含會員的新增、刪除和修改等。
utility:獨立元件,可直接搬移至其他專案。ex:檔案下載、發送郵件。
config:spring物件注入,不開放給外部修改的xml。
ex:LoginCheckerFilter.xml,登入權限
DAOService.xml,每個Service要用到的dao
BaseService.xml,所有的Service
applicationContext.xml,Hibernate基本設定檔
TransactionManager.xml,用OpenSessionInView必需
WEB-INF下的folder
config:spring物件注入,開放給外部修改的xml,方便於環境異動。
ex:DataSourceService.xml,DB登入帳密。
tiles:主要有兩部分,一.layout為tiles的框架,二.page為所有jsp頁面。
細部說明:
從Service開始說明,所有的xxxService都是interface,由xxxServiceImpl實作,每個service所用到的dao,均定義在DAOService.xml。
唯一例外的是BaseService,此BaseService注入了所有Service,定義在BaseService.xml,提供給BaseAction使用。
讀起來好像有點饒舌,看圖應該比較好理解
為什麼我要搞的這麼複雜呢?
當我在寫action需要取得Service時,必須要寫
ServletContext application = this.getServlet().getServletContext();
WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(application);
xxxService serice = (xxxService) wac.getBean("xxxService");
每次都要寫這麼一大串,感覺好煩,我又常常忘記getBean裡面要填的名稱,而且還要強制轉型。
所以最後將所有Service都注入BaseService,再BaseAction中只要寫一次getBean("BaseService"),
在DispatchDemoAction中我只要寫this.getMemberService(),就可以取得MemberService,多方便。
Tiles設定:
需要struts-tiles-1.3.10.jar
1. 在struts-config.xml加入
<plug-in className="org.apache.struts.tiles.TilesPlugin"> <set-property property="definitions-config" value="/WEB-INF/tiles/tiles-defs.xml"/> <set-property property="moduleAware" value="true" /> </plug-in>
2. 在/WEB-INF/tiles/增加tiles-defs.xml,範例請下載原始碼。
3. struts-config.xml中的action forward path也要修改,要與tiles的definition name做對應。
注意事項:
在web.xml載入這些xml是有順序性的,要注意。
<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath*:config/applicationContext/LoginCheckerFilter.xml, classpath*:config/applicationContext/TransactionManager.xml, /WEB-INF/config/applicationContext/DataSourceService.xml, classpath*:config/applicationContext/applicationContext.xml, classpath*:config/applicationContext/DAOService.xml, /WEB-INF/config/applicationContext/SearchService.xml, classpath*:config/applicationContext/BaseService.xml </param-value> </context-param>
如有疑問,歡迎提出,也請大家多多指教