十一天SSH項(xiàng)目快速實(shí)戰(zhàn)課程(第3天)
1 項(xiàng)目介紹
1.1 項(xiàng)目背景
國稅協(xié)同辦公平臺(tái)包括了行政管理、后勤服務(wù)、在線學(xué)習(xí)、納稅服務(wù)、我的空間等幾個(gè)子系統(tǒng);我們本次主要的開發(fā)功能是納稅服務(wù)子系統(tǒng)的部分模塊和基于納稅服務(wù)子系統(tǒng)信息的個(gè)人工作臺(tái)首頁。納稅服務(wù)子系統(tǒng)是辦稅PC前端或移動(dòng)端的后臺(tái)管理系統(tǒng),主要包括的功能有系統(tǒng)角色管理、用戶管理、信息發(fā)布管理、投訴受理、納稅咨詢、易告知、服務(wù)預(yù)約、服務(wù)調(diào)查等模塊。
————————————————————————————
此處上接實(shí)戰(zhàn)第二天課程內(nèi)容
4 抽取BaseAction
在action中繼承了ActionSupport和其它一些公共屬性,如selectedRow等;可能以后還會(huì)產(chǎn)生更多公共的內(nèi)容,所以應(yīng)該把這些共有的抽取出來,放入到一個(gè)基本action中,我們命名為BaseAction,讓它去繼承ActionSupport和其它公共屬性,其它的action只要繼承它就可以了。
5 系統(tǒng)異常處理
當(dāng)在頁面中發(fā)送了請求,請求被系統(tǒng)處理時(shí)出現(xiàn)錯(cuò)誤時(shí),如果沒有特別處理在請求過程中出現(xiàn)的異常信息時(shí),那么返回給用戶的則是后臺(tái)的異常信息頁面;為避免直接將這報(bào)錯(cuò)的頁面呈現(xiàn)給用戶,可對這報(bào)錯(cuò)進(jìn)行處理。
5.1 分層異常
在本系統(tǒng)中的后臺(tái)處理有分3個(gè)層,分別是action、service和dao層,每個(gè)層次都有可能出現(xiàn)相應(yīng)錯(cuò)誤。① Action層可能出現(xiàn)解析請求參數(shù)、返回結(jié)果有問題;② Service 層則可能出現(xiàn)請求中要做的業(yè)務(wù)操作出現(xiàn)問題;出現(xiàn)了問題要根據(jù)實(shí)際情況判斷是否會(huì)影響本次操作結(jié)果,action中要根據(jù)異常信息進(jìn)行判斷然后確定是否操作成功;③ dao層也可能出現(xiàn)在操作數(shù)據(jù)庫時(shí)出現(xiàn)錯(cuò)誤;而此種錯(cuò)誤一般都是致命的會(huì)影響操作結(jié)果。以此;在3個(gè)層次中至少要有兩種類型的異常信息來標(biāo)識(shí)。
制定總的系統(tǒng)異常類:
Action層異常類:
Service層異常類:
5.2 異常處理
5.2.1 全局異常映射
在struts總配置文件(struts.xml)中配置一個(gè)包括 全局異常映射和全局結(jié)果的package,然后讓其它所有的業(yè)務(wù)模塊的struts配置文件(*-struts.xml)繼承后便可處理由后臺(tái)拋出的特定異常并處理。
在總配置文件struts.xml中:
在子業(yè)務(wù)模塊中的*-sturts.xml中繼承總配置文件中的package:
在具體的后臺(tái)處理代碼中拋出系統(tǒng)異常:
如果在action中只拋出了ActionException,那么非此異常出現(xiàn)時(shí),如果在全局異常映射中配置了java.lang.Exception 異常類的映射,同樣可以捕獲。
5.2.2 制定返回類型(StrutsResultSupport)
在有特殊情況時(shí);如果沒有異常信息,但是有錯(cuò)誤并且有錯(cuò)誤信息等內(nèi)容;此時(shí)也需要進(jìn)行友好的錯(cuò)誤處理的話,那么可以借助StrutsResultSupport 返回結(jié)果類型來實(shí)現(xiàn)特定處理。此種方式先需要繼承StrutsResultSupport ,然后可以在子類中獲取本次請求的相關(guān)信息,再根據(jù)相關(guān)信息進(jìn)行結(jié)果處理:
在struts.xml總配置文件中定義全局處理類型和全局處理結(jié)果:
6 角色管理
6.1 角色與權(quán)限說明
6.1.1 角色與權(quán)限的關(guān)系
系統(tǒng)中可以存在多個(gè)角色,每個(gè)角色可以自由的組合系統(tǒng)定義的權(quán)限集合。即角色和權(quán)限的關(guān)系是多對多的關(guān)系。為了保存這種多對多關(guān)系,需要一個(gè)角色權(quán)限表來保存。角色與角色權(quán)限的關(guān)系是一對多的關(guān)系;而權(quán)限與角色權(quán)限的關(guān)系也為一對多關(guān)系。
6.1.2 定義系統(tǒng)權(quán)限集
將系統(tǒng)中需要使用到的權(quán)限先定義出來:粗粒度的分為各個(gè)子系統(tǒng)的訪問權(quán)限;這些權(quán)限可以定義在常量文件中。
6.2 角色管理CRUD
6.2.1 實(shí)體類及映射文件
1 Role/Role.hbml.xml
2 RolePrivilege/RolePrivilegeId,RolePrivilege.hbm.xml
6.2.2 dao、service層主要操作方法
dao中主要方法:
service中主要方法:
6.2.3 action中主要方法
6.2.4 配置文件
配置role-spring.xml及role-struts.xml,并將role-struts.xml加入到struts.xml總配置文件中。