麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

J2EE綜合應(yīng)用之——解析MVC模式

2019-11-18 12:44:37
字體:
供稿:網(wǎng)友

  MVC模式概述
  
  MVC是三個單詞的縮寫,分別為:
  
  模型(Model),視圖(View)和控制Controller)。
  
  MVC模式的目的就是實現(xiàn)Web系統(tǒng)的職能分工。
  
  Model層實現(xiàn)系統(tǒng)中的業(yè)務(wù)邏輯,通常可以用javaBean或EJB來實現(xiàn)。
  
  View層用于與用戶的交互,通常用jsp來實現(xiàn)。
  
  Controller層是Model與View之間溝通的橋梁,它可以分派用戶的請求并選擇恰當(dāng)?shù)囊晥D以用于顯示,同時它也可以解釋用戶的輸入并將它們映射為模型層可執(zhí)行的操作。
  
  MVC模式的好處
  
  各施其職,互不干涉
  
  在MVC模式中,三個層各施其職,所以假如一旦哪一層的需求發(fā)生了變化,就只需要更改相應(yīng)的層中的代碼而不會影響到其它層中的代碼。
  
  有利于開發(fā)中的分工
  
  在MVC模式中,由于按層把系統(tǒng)開,那么就能更好的實現(xiàn)開發(fā)中的分工。網(wǎng)頁設(shè)計人員可以進(jìn)行開發(fā)視圖層中的JSP,對業(yè)務(wù)熟悉的開發(fā)人員可開發(fā)業(yè)務(wù)層,而其它開發(fā)人員可開發(fā)控制層。
  
  有利于組件的重用
  
  分層后更有利于組件的重用。如控制層可獨立成一個能用的組件,視圖層也可做成通用的操作界面。
  
  不同JSP構(gòu)造的應(yīng)用
  
  為什么要組合使用servlet & JSP?
  
  典型的做法:使用JSP來簡化Html內(nèi)容的開發(fā)與維護(hù)
  
  對于簡單的動態(tài)代碼,使用由腳本元素調(diào)用JAVA代碼來完成。
  
  對于稍微復(fù)雜一些的應(yīng)用,則可使用腳本元素調(diào)用定制的類來完成。(即所謂的help類)
  
  對于比較復(fù)雜的應(yīng)用,則使用JAVA BEAN和定制標(biāo)簽
  
  但,這些是不夠的
  
  對于復(fù)雜的處理過程,從JSP開始做起會難以處理。
  
  JSP除了能夠帶來將實際的代碼隔離成單獨的類、bean、和定制標(biāo)簽的便利以外,它所隱含的假定是單個頁面給出單個基本視圖。
  
  對MVC的誤解
  
  必須采用復(fù)雜的框架
  
  框架有時很有用
  
  Struts
  
  JavaServer Faces (JSF)
  
  但并非必需!
  
  對于大多簡單或者適度復(fù)雜的應(yīng)用來說,使用內(nèi)建的RequestDispatcher就能夠很好地實現(xiàn)MVC
  
  MVC影響整個系統(tǒng)的設(shè)計
  
  我們可以用MVC來處理單個請求
  
  可以將它認(rèn)為是MVC方案,而非MVC框架。
  
  也被稱為是模型2方案
  
  用RequestDispatcher實現(xiàn)MVC
  
  1. 定義用以表示數(shù)據(jù)的java bean
  
  2. 使用一個servlet處理請求
  
  servlet讀取請求參數(shù),檢查數(shù)據(jù)的缺失或異常等。
  
  3. 填充bean
  
  該servlet調(diào)用業(yè)務(wù)邏輯或數(shù)據(jù)訪問代碼得到最終的結(jié)果。得出的結(jié)果被放在第一步中定義的bean中。
  
  4. 將bean存儲在請求,會話或servlet的上下文中
  
  該servlet調(diào)用請求、會話或servlet上下文對象的setAttribute存儲表達(dá)請求結(jié)果的bean的引用。
  
  5. 將請求轉(zhuǎn)發(fā)到JSP頁面
  
  該servlet確定哪個JSP頁面適合于處理當(dāng)前的情形,并使用RequestDispatcher的forward方法將控制轉(zhuǎn)移到那個頁面。
  
  6. 從bean中提取數(shù)據(jù)
  
  JSP頁面使用jsp:useBean和與第4步匹配的位置訪問之前存儲的bean,然后使用jsp:getPRoperty輸出bean的屬性。
  
  JSP頁面并不創(chuàng)建或修改bean;它只是提取并顯示由servlet創(chuàng)建的數(shù)據(jù)。
  
  jsp:useBean在MVC中的使用與在獨立JSP頁面中有什么不同
  
  JSP頁面不應(yīng)該創(chuàng)建對象
  
  應(yīng)該由servlet創(chuàng)建所有的數(shù)據(jù)對象。因此,為了保證JSP頁面不會創(chuàng)建對象,我們應(yīng)該使用<jsp:useBean ... type=“package.Class” />
  
  而不是<jsp:useBean ... class="package.Class" />
  
  JSP頁面也不應(yīng)該修改已有的對象
  
  因此,我們應(yīng)該只使用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)構(gòu)架不使用這個scope。
  
  不同數(shù)據(jù)共享方式
  
  向用戶顯示一個隨機(jī)的數(shù)字。
  
  由于每次請求應(yīng)該產(chǎn)生新的數(shù)字,因而基于請求的共享是恰當(dāng)?shù)摹?br />  
  顯示用戶的姓和名
  
  數(shù)據(jù)要為每個客戶存儲,因而基于會話的共享比較適用。
  
  顯示一個指定長度的質(zhì)數(shù)。
  
  數(shù)據(jù)在多個客戶間共享,因此,基于應(yīng)用的共享比較恰當(dāng)。
  
  基于請求的數(shù)據(jù)共享
  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" />
  
  基于會話的數(shù)據(jù)共享
  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的數(shù)據(jù)共享
  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
  
  問題:
  
  使用請求分配器進(jìn)行的轉(zhuǎn)發(fā)對客戶來說是透明的。初始的URL是瀏覽器惟一知道的URL。
  
  為什么這會比較重要?
  
  瀏覽器會如何處理類似下面的這些標(biāo)簽:
  <IMG SRC="http://www.QQread.com/java/foo.gif" …>
  <LINK REL=STYLESHEET
  HREF="JSP-Styles.Css" TYPE="text/css">
  <A HREF="bar.jsp">…</A>
  
  答案:瀏覽器將會把它們看作是相對于servlet的URL
  
  最簡單的解決方案:
  
  使用以斜杠開始的URL
  
  Summary
  
  MVC (Model 2) 方式適用于:
  
  單次提交會產(chǎn)生多個基本外觀。
  
  幾個頁面擁有大量公共的處理過程。
  
  需要為同樣的數(shù)據(jù)提供多個視圖的應(yīng)用程序,它很好地實現(xiàn)了數(shù)據(jù)層與表示層的分離,非凡適用于開發(fā)與用戶圖形界面有關(guān)的應(yīng)用程序
  
  構(gòu)架
  
  由一個servlet應(yīng)答初始的請求
  
  Servlet完成實際的數(shù)據(jù)處理并將結(jié)果存儲在bean中
  
  Bean存儲在HttpServletRequest, HttpSession, 或ServletContext中
  
  Servlet使用RequestDispatcher的forward方法將請求轉(zhuǎn)發(fā)到JSP頁面
  
  JSP頁面通過使用jsp:useBean和相應(yīng)的作用域(request, session, application)從bean中讀出數(shù)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久久久久久久久久网站 | 免费国产视频在线观看 | 免费观看一区二区三区视频 | av在线不卡免费 | 天天撸日日夜夜 | av在线在线 | 在线播放黄色网址 | 国产成人精品午夜视频' | 中午字幕无线码一区2020 | 视频一区二区三区在线观看 | 免费播放欧美毛片 | 黑人一区二区 | 天天草夜夜爽 | 欧美一级网 | 妇子乱av一区二区三区 | 久久精品79国产精品 | 久久国产精品区 | 精品国产一区二区三区四 | 成人午夜精品 | 欧美性视频一区二区 | 色网站综合 | 成人在线视频播放 | 精品一区二区在线播放 | 91精品国产乱码久久久久久久久 | 国产资源在线视频 | chinese军人gay呻吟 | 国产一区精品在线观看 | 国产精品手机在线亚洲 | 密室逃脱第一季免费观看完整在线 | 国产精品免费成人 | 国产精品爱久久久久久久 | 在线成人免费观看视频 | 99欧美精品 | 午夜国产小视频 | 亚洲精品欧美二区三区中文字幕 | 大片毛片 | 国产精品久久久乱弄 | 精品一区二区久久久久久按摩 | 国产精品99久久久久久久 | 久久久久久片 | 极品销魂一区二区三区 |