posts - 26,  comments - 14,  trackbacks - 0
          MVC
           

          MVC (Model View Controler) 本來(lái)是存在于Desktop程序中的,M是指的是數(shù)據(jù)模型,V是指的是用戶界面,C則是控制器。使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個(gè)程序可以使用不同的表現(xiàn)形式。比如說(shuō)一批統(tǒng)計(jì)數(shù)據(jù)你可以分別用柱狀圖,餅狀圖來(lái)表示。C存在的目的是確保M和V的同步,一旦M改變了,V應(yīng)該同步更新。


          MVC構(gòu)架為:
                

            
          說(shuō)明:
           




          模型——視圖——控制器(MVC)是Xerox PARC在很在代為編程的語(yǔ)言Smalltalk--80發(fā)明的一種軟件設(shè)計(jì)模式,至今運(yùn)用仍為廣泛。最近幾年被推薦為Sun公司J2EE平臺(tái)設(shè)計(jì)模式,并且受到越來(lái)越多的使用 ColdFusion 和 PHP 的開(kāi)發(fā)者的歡迎。模型-視圖-控制器模式是一個(gè)有用的工具箱,它有很多好處,但也有一些缺點(diǎn)。

           MVC如何工作

            MVC是一個(gè)設(shè)計(jì)模式,他是強(qiáng)制的使用程序的輸入,處理和輸出分開(kāi)。使用MVC應(yīng)用程序分成了三個(gè)核心部件:模型,視圖,控制器。他們各自處理自己的任務(wù)。



          模型

          模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。例如它可能用象EJBs和ColdFusion Components這樣的構(gòu)件對(duì)象來(lái)處理數(shù)據(jù)庫(kù)。被模型返回的數(shù)據(jù)是中立的,就是說(shuō)模型與數(shù)據(jù)格式無(wú)關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。


          視圖

              視圖是用戶看到并與之交互的界面。如何處理應(yīng)用程序界面變得越來(lái)越有挑戰(zhàn)性。MVC一個(gè)大的好處是他能為你的應(yīng)用程序處理很多不同的視圖。在視圖中其實(shí)沒(méi)有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲(chǔ)的還是一個(gè)雇員列表,作為視圖來(lái)講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。

           
          控制器

          控制器接受用戶的輸入并調(diào)用模型和視圖去完成用戶的需求。所以當(dāng)單擊Web頁(yè)面中的超鏈接和發(fā)送HTML表單時(shí),控制器本身不輸出任何東西和做任何處理。它只是接收請(qǐng)求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請(qǐng)求,然后用確定用哪個(gè)視圖來(lái)顯示模型處理返回的數(shù)據(jù)。


          MVC并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費(fèi)大量時(shí)間將MVC應(yīng)用到規(guī)模并不是很大的應(yīng)用程序通常會(huì)得不償失。但是MVC設(shè)計(jì)模式是一個(gè)很好創(chuàng)建軟件的途徑,它所提倡的一些原則,像內(nèi)容和顯示互相分離可能比較好理解。但是如果你要隔離模型、視圖和控制器的構(gòu)件,你可能需要重新思考你的應(yīng)用程序,尤其是應(yīng)用程序的構(gòu)架方面。如果你肯接受MVC,并且有能力應(yīng)付它所帶來(lái)的額外的工作和復(fù)雜性,MVC將會(huì)使你的軟件在健壯性,代碼重用和結(jié)構(gòu)方面上一個(gè)新的臺(tái)階。


          這里我做了個(gè)比較簡(jiǎn)單的程序其中使用了MVC思想:
          在這里創(chuàng)建了一個(gè)實(shí)體的類,也就是M(model),即User類:

          package com.bx.jstl;

          public class User {
           private int id;  //聲明了兩給屬性;
           private String name;
           
           public int getId() {
            return id;
           }
           public void setId(int id) {
            this.id = id;
           }
           public String getName() {
            return name;
           }
           public void setName(String name) {
            this.name = name;
           }
           

          }


          然后在此編寫(xiě)了一個(gè)類JSTLServlet 是繼承了類HttpServlet類的:

          package com.bx.JSServlet;

          import java.io.IOException;
          import java.util.ArrayList;
          import java.util.List;

          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import com.bx.jstl.User;

          public class JSTLServlet extends HttpServlet{
           public void doGet(HttpServletRequest request , HttpServletResponse response)
            throws IOException , ServletException
           {
            List<User> list = new ArrayList<User>();
               for(int i = 0 ; i < 8 ; i++)
               {
                User u = new User();
              u.setId(i);
              u.setName("name"+i);
              list.add(u);
               }
               request.setAttribute("UserList", list);
               request.getRequestDispatcher("/c_forEach.jsp").forward(request, response);
           }
          }
          現(xiàn)在我們應(yīng)該來(lái)配置WEB.xml了,這是每個(gè)Web項(xiàng)目都做的一步,如下所示:

          <servlet>
           <servlet-name>JSTLServlet</servlet-name>
           <servlet-class>com.bx.JSServlet.JSTLServlet</servlet-class>
          </servlet>

          <servlet-mapping>
           <servlet-name>JSTLServlet</servlet-name>
           <url-pattern>/jstl</url-pattern>
          </servlet-mapping>

          下面我們建立一個(gè)c_forEach.jsp,在其body中的編寫(xiě)代碼如下:

          <table>
               <tr><th>ID</th><th>index</th><th>count</th><th>isFirst?</th><th>isLast</th></tr>
               
               <c:forEach var="user" items="${UserList}" varStatus="status">
                 <tr>
              <td>
               ${user.id}
              </td>
              <td>
               ${user.name}
              </td>
              <td>
               ${status.index}
              </td>
              <td>
               ${status.count}
              </td>
              <td>
               ${status.first}
              </td>
              <td>
               ${status.last}
              </td>
                  </tr>
               </c:forEach>
              </table>

          現(xiàn)在我們開(kāi)啟comcat 運(yùn)行此項(xiàng)目,在瀏覽器中輸入:

          http://localhost:8080/JSP_JSTL_Project/jstl

          得到網(wǎng)頁(yè)為:
           










          FeedBack:
          # re: MVC
          2010-12-14 17:37 | 雪落無(wú)聲
          例子比較好,有空加我QQ多交流:294956981 ,呵呵!  回復(fù)  更多評(píng)論
            

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


          網(wǎng)站導(dǎo)航:
           
          <2010年12月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 曲松县| 伊吾县| 体育| 芦山县| 池州市| 巴南区| 长白| 维西| 青龙| 贵港市| 汝城县| 诸暨市| 会东县| 葫芦岛市| 福海县| 十堰市| 运城市| 西贡区| 海丰县| 遵义市| 新竹市| 泗水县| 蓝田县| 同德县| 沙河市| 彭泽县| 枣庄市| 紫金县| 奉节县| 花垣县| 合山市| 怀集县| 浏阳市| 上犹县| 吉安县| 永和县| 大关县| 永泰县| 海门市| 丁青县| 崇明县|