<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    邊城愚人

    如果我不在邊城,我一定是在前往邊城的路上。

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      31 隨筆 :: 0 文章 :: 96 評(píng)論 :: 0 Trackbacks

    1 MVC 模式

    當(dāng)年做 JSP 生產(chǎn)實(shí)習(xí)時(shí),印象最深也最困惑的模式就是 MVC 模式了。那時(shí)候 Struts 剛紅,幾乎每本 Struts 書(shū)中都會(huì)有大篇幅的 MVC 介紹。這個(gè)模式最早出現(xiàn)在 GUI ,后來(lái)在 Web 服務(wù)器端紅火起來(lái),先前在 Ajax 書(shū)中也看到 Web 客戶(hù)端的 MVC 介紹。說(shuō)實(shí)話(huà),在我看了很多人的 MVC 解釋后,我仍有些糊涂,這里說(shuō)說(shuō)我的理解。

    有人提到MVC模式時(shí)說(shuō)MVC代表了模型層、視圖層、控制層,我覺(jué)得這是不對(duì)的。在經(jīng)典的J2EE三層架構(gòu)中,三層是分為Web層、業(yè)務(wù)層、持久化層;這個(gè)經(jīng)典分層是基于分布式應(yīng)用(EJB)的,也就說(shuō),Web層物理上是在Web服務(wù)器中, 業(yè)務(wù)層和持久化層物理上是在應(yīng)用服務(wù)器中。在這種情況下,MVC只是屬于Web層這一層的,而不是分為三層。在這種分布式應(yīng)用中,視圖就是JSP(如果采用的話(huà)),控制器就是Servlet(如果采用的話(huà)),而模型就是就是調(diào)用業(yè)務(wù)層的在Web層中的樁子。假如我們采用輕量級(jí)的SSH技術(shù)架構(gòu),視圖還是JSP,控制器是Struts,而模型就是SpringHibernate。這里最難理解的就是模型的概念。我覺(jué)得模型是有狀態(tài)和行為的,那么Struts中的Action調(diào)用的Servcie方法就是模型的行為,而返回給JSPDTODO)就是模型的狀態(tài)。

    2 )頁(yè)面控制器

    對(duì)于一個(gè)頁(yè)面請(qǐng)求,總要有個(gè)地方負(fù)責(zé)處理和頁(yè)面跳轉(zhuǎn)的地方,這個(gè)地方就是頁(yè)面控制器。頁(yè)面控制器有兩種,一種是如Servlet的腳本文件,一種是如JSP的服務(wù)器頁(yè)面。對(duì)于Java來(lái)說(shuō),JSP就是只應(yīng)該用來(lái)顯示動(dòng)態(tài)的或靜態(tài)的信息,而不是用來(lái)負(fù)責(zé)處理RequestRedirect頁(yè)面,否則Servlet就要失業(yè)了。盡管一個(gè)Web程序可以全由JSP文件組成,但將控制甚至業(yè)務(wù)腳本雜亂的穿插在Tag中真的是太糟糕的實(shí)踐了。我記得最初學(xué)JSP時(shí),從網(wǎng)上得到的用JSP做的管理系統(tǒng)很多都是純JSP,那時(shí)我還以為那就是Java Web開(kāi)發(fā)的最佳實(shí)踐了!

    3 )前端控制器

    如果你不是Web框架的設(shè)計(jì)者,想必你不會(huì)有機(jī)會(huì)做個(gè)前端控制器,尤其是在擁有了大量?jī)?yōu)秀的Web框架的Java社區(qū)里。前端控制器這個(gè)模式我以前在《J2EE核心模式》中看到過(guò),感覺(jué)那本書(shū)的例子寫(xiě)的很好。前端控制器是由一個(gè)Web處理程序和一個(gè)命令(Conmmand)層次結(jié)構(gòu)組成。以Struts1為例,其前端控制器就是ActionServlet,那些我們需要編寫(xiě)的Action就是前端控制器要處理的命令。在簡(jiǎn)化Web開(kāi)發(fā)方面,前端控制器通過(guò)Web處理程序做一些具有共性的有價(jià)值的事情。比如Struts1的前端控制器通過(guò)Form簡(jiǎn)化了請(qǐng)求參數(shù)的獲取和驗(yàn)證,而Struts2WebWork)做的就更多,它的命令Action不是單例的,Action的屬性可以是封裝了請(qǐng)求參數(shù)的(經(jīng)過(guò)類(lèi)型轉(zhuǎn)換)域?qū)ο蠡騻鬏攲?duì)象,其以攔截器鏈表現(xiàn)的Web AOP更是簡(jiǎn)化了橫切性方面的操作。

    4 )模板視圖

    Java Web 中最常用的視圖表現(xiàn)技術(shù)就是 JSP ,我們可以以多種編程手法表現(xiàn)來(lái)自于數(shù)據(jù)庫(kù)中的數(shù)據(jù)。我們可以使用 Scriptlet 將模型數(shù)據(jù)嵌在 HTML 中間,我們可以使用諸如 JSTL 和框架標(biāo)簽穿插在 HTML 中間,我們也可以自定義標(biāo)簽來(lái)封裝一類(lèi)數(shù)據(jù)表現(xiàn)。相比來(lái)說(shuō),使用標(biāo)簽要比 Scriptlet 更清晰些,畢竟 JSP 頁(yè)面就是應(yīng)該編寫(xiě)可視化更好的標(biāo)簽。但如果有條件判斷等邏輯信息,使用標(biāo)簽有時(shí)也不見(jiàn)得有多清晰,這是可以考慮使用自定義標(biāo)簽。

    5 )轉(zhuǎn)換視圖

    MF 通過(guò) XSLT 介紹了轉(zhuǎn)換視圖,由于本人沒(méi)有使用過(guò) XSLT ,這里不做介紹。我倒想起了以前的 Ajax 編程,也是個(gè)轉(zhuǎn)換視圖的過(guò)程。在 Servlet 中將模型數(shù)據(jù)拼串成 XML HTML )文檔,然后傳送到 JS ,再構(gòu)造成 DOM 樹(shù)(或是將 HTML 文檔添充在指定的 HTML 標(biāo)簽內(nèi))。在最原始的 Ajax 編程中,無(wú)論是在 Servlet 中拼串還是在 JS 中構(gòu)造 DOM 樹(shù)都是很繁瑣很難調(diào)試的事情,尤其是在我很不喜歡在 Java 文件中夾雜著 Tag 信息的情況下。

    6 )兩步視圖

    兩步視圖說(shuō)的是,用兩個(gè)步驟把領(lǐng)域數(shù)據(jù)轉(zhuǎn)換成 HTML :第一步形成某種邏輯頁(yè)面,第二步把這些邏輯頁(yè)面轉(zhuǎn)換成 HTML 頁(yè)面。這個(gè)模式實(shí)際上一種裝飾者模式,第二步的視圖渲染過(guò)程要做的就是將邏輯視圖加上一致的表現(xiàn)形式。我能想到的是,可以通過(guò)諸如 SiteMesh Tiles 等工具完成兩步視圖模式。在不使用 XSLT 的情況下,第一步形成的模板視圖顯然也不是一種諸如 XML 的邏輯頁(yè)面 。

    7 )應(yīng)用控制器

    這是《 POEAA Web 表現(xiàn)模式中的最后一個(gè)模式, MF 說(shuō)這個(gè)模式很少會(huì)被用到,它一般用在具有特定的視圖導(dǎo)航的情況下,也就是說(shuō)頁(yè)面訪問(wèn)順序不是任意的而是和當(dāng)時(shí)的對(duì)象狀態(tài)有關(guān)。書(shū)中介紹的例子是關(guān)于狀態(tài)模型的,沒(méi)完全理解的說(shuō)。我能想到的例子是具有上下步的注冊(cè)過(guò)程,可以認(rèn)為上下步的切換是特定的,是具有狀態(tài)信息的;可以強(qiáng)聯(lián)系上 MF 的說(shuō)法,一個(gè)輸入控制器將請(qǐng)求傳到應(yīng)用控制器,應(yīng)用控制器根據(jù)當(dāng)前步數(shù)和請(qǐng)求的步數(shù)使用特定的命令進(jìn)行操作,并傳回輸入控制器下一步的視圖。關(guān)于應(yīng)用控制器的更精確的理解,也歡迎明白的你指出。


    注:此文系重溫《企業(yè)應(yīng)用架構(gòu)模式》一書(shū)的簡(jiǎn)要筆記,對(duì)企業(yè)應(yīng)用架構(gòu)模式或 Web 表現(xiàn)模式感興趣的朋友可以閱讀一下該書(shū)。

    posted on 2007-08-23 10:00 kafka0102 閱讀(1600) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Pattern

    只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 老司机69精品成免费视频| 亚洲国产AV无码一区二区三区 | 亚洲人成电影亚洲人成9999网 | 亚洲中文字幕久久精品无码VA| 亚洲精品免费在线观看| 亚洲日本中文字幕区| 69视频在线观看高清免费| 亚洲精品国产电影午夜| 很黄很黄的网站免费的| 亚洲欧美日韩中文无线码| 精品国产精品久久一区免费式| 亚洲变态另类一区二区三区| 在线免费观看国产视频| 一级中文字幕免费乱码专区 | 亚洲日本乱码一区二区在线二产线| aⅴ免费在线观看| 亚洲精品久久无码| 亚洲第一页综合图片自拍| 国产精品九九久久免费视频| 亚洲精品无码不卡在线播放HE| 久操免费在线观看| 亚洲一卡二卡三卡| 波多野结衣一区二区免费视频| 国产无限免费观看黄网站| 亚洲精品视频在线| 午夜毛片不卡免费观看视频| 四虎影视久久久免费观看| 亚洲AV无码专区国产乱码电影 | 成人网站免费观看| 免费一级毛片在线播放视频免费观看永久| 亚洲国产成人影院播放| 免费不卡在线观看AV| 亚洲国产精品无码久久98| 国产亚洲精品无码成人| 又黄又爽又成人免费视频| 永久免费无码网站在线观看个| 亚洲制服中文字幕第一区| 国产一级理论免费版| 97视频免费观看2区| 国产亚洲午夜精品| 亚洲制服丝袜在线播放|