隨筆 - 4  文章 - 10  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

           

          一.概述

             設(shè)計模式是對重復(fù)出現(xiàn)的問題的一種可以重用的解決方法,其本質(zhì)其實是解偶.
            1.J2EE應(yīng)用模型的分層 (1)服務(wù)器端業(yè)務(wù)邏輯
                                                (2)服務(wù)器端表示層
                                               (3)客戶端表示層
            2.J2EE的設(shè)計模式   (1)表示層體系結(jié)構(gòu)模式
                                              (2)表示層高級體系結(jié)構(gòu)模式
                                              (3)表示層伸縮性模式
                                              (4)業(yè)務(wù)層模式
                                              (5)數(shù)據(jù)傳遞模式
                                              (6)數(shù)據(jù)庫模式

          二.詳解
            1.表示層體系結(jié)構(gòu)模式
             1.1前端控制模式
              通過創(chuàng)建統(tǒng)一而且集中的組建來執(zhí)行公共的任務(wù),在J2EE的功能是截取所有的請求,并根據(jù)選擇利用這個前端控制器將請求轉(zhuǎn)發(fā)到一個頁面控制器,頁面控制器解析用戶的請求,選擇具體的業(yè)務(wù)邏輯,并根據(jù)結(jié)果轉(zhuǎn)到頁面視圖
             一個Servlet可以作為一個前端控制器,也可以作為一個頁面控制器,這個servlet調(diào)用請求所應(yīng)該執(zhí)行的業(yè)務(wù)邏輯,并根據(jù)業(yè)務(wù)邏輯的結(jié)果返回到具體的顯示頁面..

            1.1.1.Struts框架前端模式的實現(xiàn)
             Actionservlet是Struts框架的主要Servlet,所有請求都會通過它.在ActionServelt中,它會處理如下工作
            1)ActionServelt調(diào)用RequestProcessor的Process方法處理公共任務(wù)
            2)RequestProcessor得到請求對應(yīng)的Action處理請求的具體工作
             在RequestProcessor的process方法中最后會調(diào)用ProcessActionPerform方法,這就是一個命名模式的實現(xiàn),將具體請求的工作分配到Action

            1.2.1MVC模式
              這個模式是Struts框架所遵循的模式,利用Model2構(gòu)架來解偶,它在J2EE的工能為根據(jù)視圖層,控制層和模型層3層的不同功能實現(xiàn)各層任務(wù).
              (1) 視圖層提供顯示頁面的功能.
              (2)控制器層則接收用戶輸入,并轉(zhuǎn)到模型層來處理結(jié)果
              (3)模型層處理業(yè)務(wù)邏輯在選擇視圖層的顯示頁面來完成工作
              常見如下
             *Struts框架的實現(xiàn)
             *JeanBean或者EJB模型層,JSP或者HTML作為視圖層,Servelt作為控制器
           
          1.2.2裝飾模式
              該模式或為客戶端提供一個透明的擴充某實例功能的方法.該方法的返回類型就是這個實例,在客戶端不斷調(diào)用這個方法的同時,該實例的內(nèi)部表象已經(jīng)隨著功能改變完全不同了.
              J2EE設(shè)計模式中的"裝飾模式"
             servelt本身就是支持裝飾器模式,它的表現(xiàn)是裝飾一個request請求,利用裝飾器類截獲所有發(fā)送給目標對象的請求,并執(zhí)行需要的工作,完成工作之后再把請求轉(zhuǎn)發(fā)到下一個裝飾器,直到?jīng)]有了裝飾器,最后將請求發(fā)送到Servlet
             Servlet利用過濾器來攔截請求和響應(yīng).在請求到達Servelt前,為這個請求做一些額外處理.過濾器可以被看成一個程序,每個過濾器之間都能互相傳遞.
             過濾器Filter接口代碼:
           
          public interface Filter
          {
          public abstract void init(FilterConfig filterconfig) throwsException
          //do Filter方法的FilterChain參數(shù)就是為了實現(xiàn)裝飾器模式的必要條件
          public abstrat void doFilter(ServletRequest serveltrequest,ServeltResponse servletsponse,FilterChain filterchain) throws IOException,servletExcetpion;
          public abstract void destroy();
          }
          Filter()對象十分重用,doFilter()方法最后會調(diào)用FilterChain對象的doFilter()方法,FilterChain對象的doFilter()方法會激活下一個相關(guān)的過濾器

           一個過濾器
             這個過濾器SetCharacterEncodingFilter被用在當request請求到達Servelt前,為request的參數(shù)信息的字符編碼進行設(shè)定
             SetCharcterEncodingFilter.java(省略)

          配置過濾器如下:
          <filter>
          <filter-name>Set character</filter-name>
          <filter-class>XXX.XXX.SetcharacterEncodingFilter</filter-class>聲明過濾器的java實體名
          <init-param>/*表明了過濾器要傳入的初始化方法*/
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-valie>
          </init-param>
          </filter>

             1.3.1表示層高級體系結(jié)構(gòu)模式
              1)復(fù)合視圖模式(合成模式):提供一個樹狀的對象結(jié)構(gòu),樹枝類與樹葉類都實現(xiàn)同一個接口,以便客戶端在調(diào)用任何對象時都只需要調(diào)用該樹狀結(jié)構(gòu)的根接口就可以了
             2) 復(fù)合視圖在服務(wù)器端表示層使用,利用的合成模式的思想將視圖的布局從視圖中抽離出來,形成由一系列通用組件組成的模板
                 把視圖("島航","頁眉","頁腳"和"主體")的集合,每個元素是一個結(jié)點,而每個元素也可以是一個容器,包含更多的子元素.
               模板可以被看成是接口,視圖則可被看成樹枝結(jié)點和樹葉結(jié)點

          1.3.2視圖助手模式
              此模式避免視圖過于特殊化,功能是使一組視圖助手將模型數(shù)據(jù)轉(zhuǎn)換成一種中間數(shù)據(jù)模式.視圖或視圖助手能夠?qū)⒅虚g數(shù)據(jù)模型轉(zhuǎn)換成一種合適表達給用戶的形式如"html""xml"
              (1)標簽的工作方式
                標簽庫用來幫助程序員通過簡單的代碼構(gòu)造實現(xiàn)頁面邏輯.一個標簽應(yīng)該繼承javax.servlet.jsp.tagext.tagsupport,并給出doStartTag和doEndTag兩個方法來實現(xiàn)
                doStartTag方法:在標簽開始時由Jsp容器調(diào)用,通常在這個方法中實現(xiàn)業(yè)務(wù)邏輯
                doEndTag方法:在標簽結(jié)束時由JSP容器調(diào)用,通常在這個方法控制輸出.
               (2)標簽的實現(xiàn)
                 以下是Struts框架提供的ConditionalTagBas部分代碼
                 ConditionalTagBas
                    
           1public int doStartTag() throws JspException{
           2 //doStartTag()表示標簽開始
           3  if(condition())
           4    return(EVAL_BODY_INCLUDE);
           5 //EVAL_BODY_INCLUDE告訴JSP容器標簽正文的內(nèi)容,并把這些內(nèi)容送入輸出流
           6  else
           7     return(SKIP_BODY);
           8 //SKIP_BODY告訴JSP容器不要處理標簽正文的內(nèi)容
           9 }

          10public int doEndTag() throws JspException{
          11//doEndTag() 表示標簽結(jié)束
          12   return(EVAL_PAGE);
          13//EVAL_PAGE標簽處理完畢
          14}


          1.3.3服務(wù)工作模式
               服務(wù)工作者模式將頁面流轉(zhuǎn),前端控制模式,視圖助手模式合在一起使用,表示"請求--轉(zhuǎn)發(fā)--視圖"的整套流程,服務(wù)器工作者模式也是MVC模式的實現(xiàn)標準,Struts框架本身基于這個模式實現(xiàn)

          1.4  表示層伸縮性模式
            1.4.1異步頁面模式
                   當遠程數(shù)據(jù)發(fā)生變化時,將其緩存下來這個模式又被稱為"發(fā)布者--訂閱者--模型".功能是利用一個訂閱者角色在一定的時間間隔或數(shù)據(jù)發(fā)生變化時接收來自發(fā)布者角色的數(shù)據(jù),訂閱者角色同時會利用模型層來更新數(shù)據(jù)庫,常見的應(yīng)用為,當發(fā)布服務(wù)器要顯示最新信息的Html頁面時,會利用一個訂閱者角色我負責(zé).
            
             1.4.2
                該模式可以緩存動態(tài)的頁面,盡可能減少重復(fù)生成的頁面,功能是利用一個緩存過濾器截獲請求.判斷該請求所返回的頁面是否有緩存,如果它在緩存中,則以緩存的頁面最高效地進行響應(yīng);如果沒有可緩存數(shù)據(jù),則執(zhí)行隨后的工作,緩存生成頁面的結(jié)果,緩存過濾器應(yīng)該被擺放在"裝飾過濾器"和工作Servlet之前,該模式其實是裝飾器模式的一種變體,常見為對HTTPServletResponse對象進行裝飾來保存請求處理結(jié)果
              1.4.3
                資源池模式 JDBC連接池
              客戶

          posted on 2007-10-04 12:48 冬天出走的豬 閱讀(236) 評論(0)  編輯  收藏 所屬分類: struts
          主站蜘蛛池模板: 佛教| 田林县| 乐亭县| 和平县| 井冈山市| 洮南市| 华蓥市| 吴忠市| 务川| 丰都县| 若尔盖县| 屏东县| 米林县| 昭苏县| 沂源县| 阳新县| 盐津县| 定兴县| 陈巴尔虎旗| 南安市| 定南县| 图们市| 察哈| 宝兴县| 乐平市| 循化| 广平县| 湛江市| 滦南县| 河南省| 民乐县| 朝阳市| 阳谷县| 扎囊县| 买车| 襄垣县| 安福县| 沂南县| 泰安市| 夹江县| 琼中|