Java Web應(yīng)用分層

Java Web目錄結(jié)構(gòu)

Java Web應(yīng)用的目錄有嚴(yán)格的存放規(guī)則。一般為:

螢?zāi)豢煺?2016-10-25 14.33.24.png

WEB-INF和META-INF是java web項(xiàng)目特有目錄顾复,放在根目錄下,且全部是大寫。

WEB-INF

基本內(nèi)容有: /WEB-INF/web.xml Web應(yīng)用程序配置文件荐绝,非常常用。這是一個(gè)XML文件避消,其中描述了 servlet 和其他的應(yīng)用組件配置及命名規(guī)則低滩。程序的入口描述也在這里召夹。
/WEB- INF/classes/ 編譯好的類文件會放到這個(gè)目錄里。
/WEB- INF/lib/ 項(xiàng)目引用到的各種JAR文件恕沫,如spring jar文件

META-INF

存放程序入口信息监憎,里面的MANIFEST文件記錄了這些信息,可以歸納出下面幾個(gè)大類:

一. 一般屬性

1.Manifest-Version 用來定義manifest文件的版本婶溯,例如:Manifest-Version: 1.0
2.Created-By 聲明該文件的生成者鲸阔,一般該屬性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1
3.Signature-Version 定義jar文件的簽名版本
4.Class-Path 應(yīng)用程序或者類裝載器使用該值來構(gòu)建內(nèi)部的類搜索路徑 二. 應(yīng)用程序相關(guān)屬性
5.Main-Class 定義jar文件的入口類迄委,該類必須是一個(gè)可執(zhí)行的類褐筛,一旦定義了該屬性即可通過 java -jar x.jar來運(yùn)行該jar文件。 三. 小程序(Applet)相關(guān)屬性
6.Extendsion-List 該屬性指定了小程序需要的擴(kuò)展信息列表叙身,列表中的每個(gè)名字對應(yīng)以下的屬性
7.-Extension-Name
8.-Specification-Version
9.-Implementation-Version
10.-Implementation-Vendor-Id
11.-Implementation-URL 四. 擴(kuò)展標(biāo)識屬性
12.Extension-Name 該屬性定義了jar文件的標(biāo)識渔扎,例如Extension-Name: Struts Framework 五. 包擴(kuò)展屬性
13.Implementation-Title 定義了擴(kuò)展實(shí)現(xiàn)的標(biāo)題
14.Implementation-Version 定義擴(kuò)展實(shí)現(xiàn)的版本
15.Implementation-Vendor 定義擴(kuò)展實(shí)現(xiàn)的組織
16.Implementation-Vendor-Id 定義擴(kuò)展實(shí)現(xiàn)的組織的標(biāo)識
17.Implementation-URL : 定義該擴(kuò)展包的下載地址(URL)
18.Specification-Title 定義擴(kuò)展規(guī)范的標(biāo)題
19.Specification-Version 定義擴(kuò)展規(guī)范的版本
20.Specification-Vendor 聲明了維護(hù)該規(guī)范的組織
21.Sealed 定義jar文件是否封存,值可以是true或者false (這點(diǎn)我還不是很理解) 六. 簽名相關(guān)屬性 簽名方面的屬性我們可以來參照J(rèn)avaMail所提供的mail.jar中的一段 Name: javax/mail/Address.class Digest-Algorithms: SHA MD5 SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4= MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw== 這段內(nèi)容定義類簽名的類名曲梗、計(jì)算摘要的算法名以及對應(yīng)的摘要內(nèi)容(使用BASE64方法進(jìn)行編碼)

系統(tǒng)分層

推薦如下分層結(jié)構(gòu)赞警,圖中默認(rèn)上層依賴于下層,箭頭關(guān)系表示可直接依賴虏两,如:OpenApi層可以依賴于Web層愧旦,也可以直接依賴于Service層,依此類推:

業(yè)務(wù)分層.jpg

OpenApi層:可直接封裝Service接口暴露成HSF接口定罢,或者通過Web封裝成http接口笤虫。 顯示層:模板渲染層。當(dāng)前主要是velocity渲染祖凫,JS渲染琼蚯,JSP渲染等。 Web層:主要是對訪問控制進(jìn)行轉(zhuǎn)發(fā)惠况,各類基本參數(shù)校驗(yàn)遭庶,或者不復(fù)用的業(yè)務(wù)簡單處理等。 Service層:相對具體的業(yè)務(wù)邏輯服務(wù)層稠屠。 Manager層:通用業(yè)務(wù)處理層峦睡,它有如下特征:
1) 對第三方平臺封裝的層,預(yù)處理返回結(jié)果及轉(zhuǎn)化異常信息权埠; 2) 對Service層通用能力的下沉榨了,如緩存方案、中間件通用處理攘蔽; 3) 與DAO層交互龙屉,對DAO的業(yè)務(wù)通用能力的封裝。
DAO層:數(shù)據(jù)訪問層满俗,與底層Mysql转捕、Oracle作岖、Hbase、OB進(jìn)行數(shù)據(jù)交互瓜富。 第三方平臺:包括其它部門HSF開放接口鳍咱,基礎(chǔ)平臺,其它公司的HTTP接口与柑。

異常處理規(guī)約分層

在DAO層谤辜,產(chǎn)生的異常類型有很多,無法用細(xì)粒度異常進(jìn)行catch价捧,使用catch(Exception e)方式丑念,并throw new DaoException(e),不需要打印日志结蟋,因?yàn)槿罩驹贛anager/Service層一定需要捕獲并打到日志文件中去脯倚,如果同臺服務(wù)器再打日志,浪費(fèi)性能和存儲嵌屎。
??在Service層往上拋的同時(shí)就必須使用日志推正,因?yàn)槭荝PC調(diào)用,可能本地出錯(cuò)宝惰,未必能正常反饋到業(yè)務(wù)端植榕。這里就必須盡可能帶上參數(shù)信息,相當(dāng)于保護(hù)案發(fā)現(xiàn)場尼夺,并打印異常堆棧尊残。
??如果Manager層與Service同機(jī)部署,日志方式與DAO層處理一致淤堵,如果是單獨(dú)部署寝衫,則采用與Service一致的處理方式。
??Web層絕不應(yīng)該繼續(xù)往上拋異常拐邪,因?yàn)橐呀?jīng)處于頂層慰毅,無繼續(xù)處理異常的方式,如果意識到這個(gè)異常將導(dǎo)致頁面無法正常渲染扎阶,那么就應(yīng)該直接跳轉(zhuǎn)到友好錯(cuò)誤頁面事富,盡量加上友好的錯(cuò)誤提示信息。
??openApi層要將異常處理成錯(cuò)誤碼和錯(cuò)誤信息方式返回

領(lǐng)域模型分層

DO(Data Object)
與數(shù)據(jù)庫表結(jié)構(gòu)一一對應(yīng)乘陪,通過DAO層向上傳輸數(shù)據(jù)源對象。
DTO(Data Transfer Object)
數(shù)據(jù)傳輸對象雕擂,Service和Manager向外傳輸?shù)膶ο蟆?br> BO(Business Object)
業(yè)務(wù)對象啡邑。可以由Service層輸出的封裝業(yè)務(wù)邏輯的對象井赌。
QUERY
數(shù)據(jù)查詢對象谤逼,各層接收上層的查詢請求贵扰。
注:超過2個(gè)參數(shù)的查詢封裝,禁止使用Map類來傳輸流部。
VO(View Object)
顯示層對象戚绕,通常是Web向模板渲染引擎層傳輸?shù)膶ο蟆?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市枝冀,隨后出現(xiàn)的幾起案子舞丛,更是在濱河造成了極大的恐慌,老刑警劉巖果漾,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件球切,死亡現(xiàn)場離奇詭異,居然都是意外死亡绒障,警方通過查閱死者的電腦和手機(jī)吨凑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來户辱,“玉大人鸵钝,你說我怎么就攤上這事÷洌” “怎么了恩商?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焚鹊。 經(jīng)常有香客問我痕届,道長,這世上最難降的妖魔是什么末患? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任研叫,我火速辦了婚禮,結(jié)果婚禮上璧针,老公的妹妹穿的比我還像新娘嚷炉。我一直安慰自己,他們只是感情好探橱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布申屹。 她就那樣靜靜地躺著,像睡著了一般隧膏。 火紅的嫁衣襯著肌膚如雪哗讥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天胞枕,我揣著相機(jī)與錄音杆煞,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛决乎,可吹牛的內(nèi)容都是我干的队询。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼构诚,長吁一口氣:“原來是場噩夢啊……” “哼蚌斩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起范嘱,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤送膳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后彤侍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肠缨,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年盏阶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晒奕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡名斟,死狀恐怖脑慧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砰盐,我是刑警寧澤闷袒,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站岩梳,受9級特大地震影響囊骤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜冀值,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一也物、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧列疗,春花似錦滑蚯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至古劲,卻和暖如春斥赋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背产艾。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工疤剑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洛波,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓骚露,卻偏偏與公主長得像,于是被迫代替她去往敵國和親缚窿。 傳聞我的和親對象是個(gè)殘疾皇子棘幸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)倦零,斷路器误续,智...
    卡卡羅2017閱讀 134,656評論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法扫茅,內(nèi)部類的語法蹋嵌,繼承相關(guān)的語法,異常的語法葫隙,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,810評論 6 342
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,811評論 0 11
  • 在擁有努力工作栽烂、敢于冒險(xiǎn)、存錢投資恋脚、多了解最新信息腺办、學(xué)習(xí)先進(jìn)技術(shù)等等必要素質(zhì)之后,最關(guān)鍵也最重要的就是掌握稀缺資源...
    Y以夢為馬丶閱讀 448評論 0 1