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

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

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

    sharky的點滴積累

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      56 隨筆 :: 104 文章 :: 10 評論 :: 0 Trackbacks

    MVC模式概述


    ?    MVC是三個單詞的縮寫,分別為:
    模型(Model),視圖(View)和控制Controller)。
    MVC模式的目的就是實現Web系統的職能分工。
      
    ?    Model層實現系統中的業務邏輯,通??梢杂肑avaBean或EJB來實現。 
    ?    View層用于與用戶的交互,通常用JSP來實現。
      
    ?    Controller層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當的視圖以用于顯示,同時它也可以解釋用戶的輸入并將它們映射為模型層可執行的操作。

    MVC模式的好處

     
    ?    各施其職,互不干涉
    在MVC模式中,三個層各施其職,所以如果一旦哪一層的需求發生了變化,就只需要更改相應的層中的代碼而不會影響到其它層中的代碼。 
    ?    有利于開發中的分工
    在MVC模式中,由于按層把系統開,那么就能更好的實現開發中的分工。網頁設計人員可以進行開發視圖層中的JSP,對業務熟悉的開發人員可開發業務層,而其它開發人員可開發控制層。 
    ?    有利于組件的重用
    分層后更有利于組件的重用。如控制層可獨立成一個能用的組件,視圖層也可做成通用的操作界面。 

    不同JSP構造的應用



    為什么要組合使用servlet & JSP?
    ?    典型的做法:使用JSP來簡化HTML內容的開發與維護 
    ?    對于簡單的動態代碼,使用由腳本元素調用JAVA代碼來完成。 
    ?    對于稍微復雜一些的應用,則可使用腳本元素調用定制的類來完成。(即所謂的help類) 
    ?    對于比較復雜的應用,則使用JAVA BEAN和定制標簽
    ?    但,這些是不夠的 
    ?    對于復雜的處理過程,從JSP開始做起會難以處理。 
    ?    JSP除了能夠帶來將實際的代碼隔離成單獨的類、bean、和定制標簽的便利以外,它所隱含的假定是單個頁面給出單個基本視圖。

    對MVC的誤解

    ?    必須采用復雜的框架 
    ?    框架有時很有用 
    ?    Struts 
    ?    JavaServer Faces (JSF) 
    ?    但并非必需! 
    ?    對于大多簡單或者適度復雜的應用來說,使用內建的RequestDispatcher就能夠很好地實現MVC
    ?    MVC影響整個系統的設計 
    ?    我們可以用MVC來處理單個請求 
    ?    可以將它認為是MVC方案,而非MVC框架。 
    ?    也被稱為是模型2方案


    用RequestDispatcher實現MVC

    ?    1. 定義用以表示數據的java bean 
    ?    2. 使用一個servlet處理請求 
    ?    servlet讀取請求參數,檢查數據的缺失或異常等。 
    ?    3. 填充bean 
    ?    該servlet調用業務邏輯或數據訪問代碼得到最終的結果。得出的結果被放在第一步中定義的bean中。 
    ?    4. 將bean存儲在請求,會話或servlet的上下文中 
    ?    該servlet調用請求、會話或servlet上下文對象的setAttribute存儲表達請求結果的bean的引用。


    ?    5. 將請求轉發到JSP頁面 
    ?     該servlet確定哪個JSP頁面適合于處理當前的情形,并使用RequestDispatcher的forward方法將控制轉移到那個頁面。 
    ?    
    ?    6. 從bean中提取數據 
    ?    JSP頁面使用jsp:useBean和與第4步匹配的位置訪問之前存儲的bean,然后使用jsp:getProperty輸出bean的屬性。 
    ?    JSP頁面并不創建或修改bean;它只是提取并顯示由servlet創建的數據。

    jsp:useBean在MVC中的使用與在
    獨立JSP頁面中有什么不同
    ?    JSP頁面不應該創建對象 
    ?    應該由servlet創建所有的數據對象。因此,為了保證JSP頁面不會創建對象,我們應該使用<jsp:useBean ... type=“package.Class” />
    而不是
    <jsp:useBean ... class="package.Class" />
    ?    JSP頁面也不應該修改已有的對象 
    ?    因此,我們應該只使用jsp:getProperty,不使用jsp:setProperty
    。 提示:jsp:useBean的scope選項
    ?    request 
    ?    <jsp:useBean id="..." type="..." scope="request" />
    ?    session 
    ?    <jsp:useBean id="..." type="..." scope="session" />
    ?    application 
    ?    <jsp:useBean id=".." type=".." scope="application" />
    ?    page 
    ?    <jsp:useBean id=“...” type=“...” scope=“page” />
    或者僅僅使用<jsp:useBean id="..." type="..." /> 
    ?    MVC (Model 2)構架不使用這個scope。

    不同數據共享方式
    ?    向用戶顯示一個隨機的數字。 
    ?    由于每次請求應該產生新的數字,因而基于請求的共享是恰當的。 
    ?    
    ?    顯示用戶的姓和名 
    ?    數據要為每個客戶存儲,因而基于會話的共享比較適用。 
    ?    
    ?    顯示一個指定長度的質數。 
    ?    數據在多個客戶間共享,因此,基于應用的共享比較恰當。

    基于請求的數據共享
    ?    Servlet 
        ValueObject value = new ValueObject(...); 
        request.setAttribute("key", value); 
        RequestDispatcher dispatcher = 
    request.getRequestDispatcher("/WEB-INF/SomePage.jsp"); 
        dispatcher.forward(request, response); 

    ?    JSP 
    <jsp:useBean id="key" type="somePackage.ValueObject" 
    scope="request" /> 
    <jsp:getProperty name="key" property="someProperty" />

    基于會話的數據共享
    ?    Servlet 
    ValueObject value = new ValueObject(...); 
    HttpSession session = request.getSession(); 
    session.setAttribute("key", value); 
    RequestDispatcher dispatcher = 
    request.getRequestDispatcher("/WEB-INF/SomePage.jsp"); 
    dispatcher.forward(request, response); 

    ?    JSP 
    <jsp:useBean id="key" type="somePackage.ValueObject" 
    scope="session" /> 
    <jsp:getProperty name="key" property="someProperty" />

    基于ServletContext的數據共享
    ?    Servlet 
        synchronized(this) 
        { 
            ValueObject value = new ValueObject(...); 
            getServletContext().setAttribute("key", value); 
            RequestDispatcher dispatcher = 
            request.getRequestDispatcher("/WEB-INF/SomePage.jsp"); 
            dispatcher.forward(request, response); 
        } 

    ?    JSP 
    <jsp:useBean id="key" type="somePackage.ValueObject“ scope="application" /> 
    <jsp:getProperty name="key" property="someProperty" />

    JSP頁面中的相對URL
    ?    問題: 
    ?    使用請求分配器進行的轉發對客戶來說是透明的。初始的URL是瀏覽器惟一知道的URL。 
    ?    為什么這會比較重要? 
    ?    瀏覽器會如何處理類似下面的這些標簽: 
            <IMG SRC="foo.gif" …> 
            <LINK REL=STYLESHEET 
            HREF="JSP-Styles.css" TYPE="text/css"> 
            <A HREF="bar.jsp">…</A> 
    ?    答案:瀏覽器將會把它們看作是相對于servlet的URL 
    ?    
    ?    最簡單的解決方案: 
    ?    使用以斜杠開始的URL

    Summary
    ?    MVC (Model 2) 方式適用于: 
    ?    單次提交會產生多個基本外觀。 
    ?    幾個頁面擁有大量公共的處理過程。 
    ?    需要為同樣的數據提供多個視圖的應用程序,它很好地實現了數據層與表示層的分離,特別適用于開發與用戶圖形界面有關的應用程序 
    ?    
    ?    構架 
    ?    由一個servlet應答初始的請求 
    ?    Servlet完成實際的數據處理并將結果存儲在bean中 
    ?    Bean存儲在HttpServletRequest, HttpSession, 或ServletContext中 
    ?    Servlet使用RequestDispatcher的forward方法將請求轉發到JSP頁面 
    ?    JSP頁面通過使用jsp:useBean和相應的作用域(request, session, application)從bean中讀出數
    posted on 2005-09-30 20:35 sharky的點滴積累 閱讀(193) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲午夜国产精品| 亚洲国产美国国产综合一区二区| 中文无码亚洲精品字幕| 精品久久久久成人码免费动漫| 亚洲精品高清视频| 最近的中文字幕大全免费8| 亚洲高清视频在线观看| 97国产在线公开免费观看| 亚洲AV永久纯肉无码精品动漫| 成人性生交大片免费看中文| 亚洲av无码国产精品色午夜字幕 | 亚洲精品综合一二三区在线 | 成在线人直播免费视频| 亚洲国产精品成人| 久久不见久久见免费影院www日本| 久久精品国产亚洲精品| 美女在线视频观看影院免费天天看| 亚洲精品亚洲人成在线观看| 国产好大好硬好爽免费不卡 | 亚洲av无码片在线播放| 91精品导航在线网址免费| 亚洲w码欧洲s码免费| 麻豆成人精品国产免费| 一级特黄色毛片免费看| 亚洲成人午夜在线| 成人免费无毒在线观看网站| 免费人成再在线观看网站| 亚洲日韩欧洲乱码AV夜夜摸| 久久国产乱子伦免费精品| 国产亚洲精品成人AA片| 在线a亚洲v天堂网2018| 黄页免费在线观看| 亚洲六月丁香婷婷综合| 亚洲精品国产综合久久一线| 99久热只有精品视频免费看 | 又硬又粗又长又爽免费看 | 国产精品亚洲色图| 亚洲AV无码一区二区三区系列| 免费下载成人电影| 一级毛片免费全部播放| 亚洲美女视频免费|