国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

MVC模式概述

2024-07-21 02:15:05
字體:
來源:轉載
供稿:網友
    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="http://www.survivalescaperooms.com/htmldata/2005-11-17/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中讀出數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 团风县| 宁都县| 通河县| 昭平县| 壤塘县| 会昌县| 太仆寺旗| 巴楚县| 工布江达县| 昌江| 博客| 中西区| 山阳县| 革吉县| 屏东县| 秦皇岛市| 利辛县| 县级市| 永平县| 武威市| 宾阳县| 乐陵市| 靖州| 邳州市| 南郑县| 武强县| 桃源县| 嘉义县| 江都市| 灵璧县| 依兰县| 武川县| 喀喇沁旗| 石景山区| 讷河市| 驻马店市| 原平市| 黎川县| 镇安县| 岑溪市| 开江县|