<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          理解MVC及快速入門

          共 6221字,需瀏覽 13分鐘

           ·

          2022-07-10 17:50


          來(lái)源 | 個(gè)人博客| 作者 | MrSaber

          說(shuō)明:

          傳統(tǒng)MVC——>JSPModel2——>Front Controller + Application Controller + Page Controller + Context 三種模式是JavaWeb設(shè)計(jì)模式的逐漸適配和演進(jìn)。本文分別講述了這三種模式,作為了解即可。SpringMVC正是采用了第三種設(shè)計(jì)模式。


          MVC


          說(shuō)

            MVC是Xerox PARC在20世紀(jì)80年代為編程語(yǔ)言SmallTalk發(fā)明的一種軟件設(shè)計(jì)模式。
            MVC是一種設(shè)計(jì)模式,它強(qiáng)制性地把應(yīng)用程序的數(shù)據(jù)展示、數(shù)據(jù)處理和流程控制分開(kāi)
            MVC將應(yīng)用程序分成3個(gè)核心模塊:模型、視圖、控制器,他們相互聯(lián)結(jié)又分別擔(dān)當(dāng)不同的任務(wù),如圖示所示。

          圖示

            


          理解

            模型:數(shù)據(jù)模型,提供要展示的數(shù)據(jù),因此包含數(shù)據(jù)和行為,可以認(rèn)為是JavaBean,一個(gè)模型可以為多個(gè)視圖提供數(shù)據(jù)。
            視圖:負(fù)責(zé)模型的展示,一般就是我們見(jiàn)到的用戶界面,客戶想要看到的東西。
            控制器:控制器負(fù)責(zé)應(yīng)用的流程控制,所謂流程控制就是接受用戶請(qǐng)求,委托給模型進(jìn)場(chǎng)處理,后獲取模型數(shù)據(jù)交由視圖展示。

          JSPModel2

          說(shuō)
            在早期的Web應(yīng)用中,JSP負(fù)責(zé)處理業(yè)務(wù)邏輯、控制網(wǎng)頁(yè)流程并創(chuàng)建HTML頁(yè)面。基本上JSP包攬的所有的模塊,這無(wú)疑造成了不少的困擾:
            比如:

            1.可維護(hù)性差
            2.調(diào)試?yán)щy
            3.HTML與Java程序代碼強(qiáng)耦合在一起
            4.內(nèi)嵌的流程控制邏輯,要理解應(yīng)用程序的邏輯必須瀏覽所有的JSP頁(yè)面。


            為了解決這些問(wèn)題,SUN公司先后制定了兩種設(shè)計(jì)模式,分別為Model1和Model2。雖然Model1在一定程序上實(shí)現(xiàn)了MVC中的視圖和模型,但是他的運(yùn)用并不理想,知道Model2的出現(xiàn)才改變了這種局面。
            Model2中用JSP技術(shù)實(shí)現(xiàn)了視圖的功能、用Servlet技術(shù)實(shí)現(xiàn)了控制器的功能、用JavaBean技術(shù)實(shí)現(xiàn)了模型的功能
          圖示

            


          實(shí)例

            

            

            

          Front Controller + Application Controller + Page Controller + Context


          說(shuō)明
            前端控制器+應(yīng)用控制器+頁(yè)面控制器(也有稱其為動(dòng)作)+上下文,也是一種WebMVC模型,只是責(zé)任更加明確,SpringMVC正是這種模式
          運(yùn)行流程圖

            
          責(zé)
            Front Controller:前端控制器,負(fù)責(zé)為表現(xiàn)層提供統(tǒng)一訪問(wèn)點(diǎn),從而避免Model2中出現(xiàn)的重復(fù)的控制邏輯(由前端控制器統(tǒng)一回調(diào)相應(yīng)的功能方法,如前邊的根據(jù)submitFlag=login轉(zhuǎn)調(diào)login方法);并且可以為多個(gè)請(qǐng)求提供共用的邏輯(如準(zhǔn)備上下文等等),將選擇具體視圖和具體的功能處理(如login里邊封裝請(qǐng)求參數(shù)到模型,并調(diào)用業(yè)務(wù)邏輯對(duì)象)分離。
           
            Application Controller:應(yīng)用控制器,前端控制器分離選擇具體視圖和具體的功能處理之后,需要有人來(lái)管理,應(yīng)用控制器就是用來(lái)選擇具體視圖技術(shù)(視圖的管理)和具體的功能處理(頁(yè)面控制器/命令對(duì)象/動(dòng)作管理),一種策略設(shè)計(jì)模式的應(yīng)用,可以很容易的切換視圖/頁(yè)面控制器,相互不產(chǎn)生影響。
           
            Page Controller(Command):頁(yè)面控制器/動(dòng)作/處理器:功能處理代碼,收集參數(shù)、封裝參數(shù)到模型,轉(zhuǎn)調(diào)業(yè)務(wù)對(duì)象處理模型,返回邏輯視圖名交給前端控制器(和具體的視圖技術(shù)解耦),由前端控制器委托給應(yīng)用控制器選擇具體的視圖來(lái)展示,可以是命令設(shè)計(jì)模式的實(shí)現(xiàn)。頁(yè)面控制器也被稱為處理器或動(dòng)作。
           
            Context:上下文,還記得Model2中為視圖準(zhǔn)備要展示的模型數(shù)據(jù)嗎,我們直接放在request中(Servlet API相關(guān)),有了上下文之后,我們就可以將相關(guān)數(shù)據(jù)放置在上下文,從而與協(xié)議無(wú)關(guān)(如Servlet API)的訪問(wèn)/設(shè)置模型數(shù)據(jù),一般通過(guò)ThreadLocal模式實(shí)現(xiàn)。

          HelloWorld


           0.說(shuō)明

            現(xiàn)在我們以前了解了MVC編程模型,接下來(lái)我們實(shí)際地編寫(xiě)一個(gè)SpringMVC入門實(shí)例,我們現(xiàn)在還不能解所有的技術(shù)細(xì)節(jié),但是在接下來(lái)的博客一定會(huì)有相關(guān)解釋。

           1.加入Jar包

            

          說(shuō)明:

          (http://projects.spring.io/spring-framework/)進(jìn)入官方網(wǎng)站,頁(yè)面右側(cè)選擇4.0版本進(jìn)行下載,下載完畢后添加以上Jar包到Java環(huán)境變量中。

          2.配置Web.xml文件

          <?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
                  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
                  version="3.1">

             <!--配置DispatcherServlet-->
             <servlet>
                 <servlet-name>dispatcherServlet</servlet-name>
                 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                 <!--配置初始化參數(shù):作用是配置SpringMVC配置文件的位置和名稱-->
                 <init-param>
                     <param-name>contextConfigLocation</param-name>
                     <param-value>classpath:dispatcherServlet-servlet.xml</param-value>
                 </init-param>
                 <load-on-startup>1</load-on-startup>
             </servlet>

             <servlet-mapping>
                 <servlet-name>dispatcherServlet</servlet-name>
                 <url-pattern>/</url-pattern>
             </servlet-mapping>
          </web-app>


          說(shuō)明:

            DispatcherServlet是前端控制器設(shè)計(jì)模式的實(shí)現(xiàn),提供了Spring Web MVC的集中訪問(wèn)點(diǎn)。 

            與其它web MVC框架一樣,Spring的web MVC框架是一個(gè)請(qǐng)求驅(qū)動(dòng)的web框架,其設(shè)計(jì)圍繞一個(gè)中心的servlet進(jìn)行, 它能將請(qǐng)求分發(fā)給控制器,并提供其它功能幫助web應(yīng)用開(kāi)發(fā)。然而,Spring的DispatcherServlet 所做的不僅僅是這些,它和Spring的IoC容器完全集成在一起,從而允許你使用Spring的其它功能

            請(qǐng)求處理流程:

              

           

          3.加入SpringMVC的配置文件

          <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xmlns:context="http://www.springframework.org/schema/context"
                xsi:schemaLocation="http://www.springframework.org/schema/beans
                  http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
          >

             <!--配置自動(dòng)掃描的包-->
             <context:component-scan base-package="handles"/>
             <!--配置視圖解析器:如何把handle方法返回值解析為實(shí)際的物理視圖-->
             <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                 <property name="prefix" value="/WEB-INF/views/"/>
                 <property name="suffix" value=".jsp"/>
             </bean></beans>


          說(shuō)明:

            視圖解析器用來(lái)解析視圖。如上視圖解析器配置有前綴和后綴兩個(gè)屬性,這樣一來(lái),view路徑將會(huì)縮短。

          4.創(chuàng)建請(qǐng)求處理器類(編寫(xiě)控制器)

          說(shuō)明:

            這里我們使用了注解@Controller ,可以表明了該類作為一個(gè)控制器,而不需要你擴(kuò)展任何控制器基類或者引用ServletAPI。當(dāng)然,如果需要還是可以引用特定Servlet功能。注解@Controller的基本目標(biāo)是擔(dān)任所注解的類的原型的角色,指明它的職責(zé)。

            所注解的控制器Bean可以被顯示定義。@Controller也允許自動(dòng)偵測(cè)。要實(shí)現(xiàn)隊(duì)所注解的控制器的自動(dòng)偵測(cè),必須要像配置中加入組件掃描的部分的語(yǔ)句。  

          <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:p="http://www.springframework.org/schema/p"
             xmlns:context="http://www.springframework.org/schema/context"
             xsi:schemaLocation="
                 http://www.springframework.org/schema/beans
                 http://www.springframework.org/schema/beans/spring-beans.xsd
                 http://www.springframework.org/schema/context
                 http://www.springframework.org/schema/context/spring-context.xsd"
          >


             <context:component-scan base-package="org.springframework.samples.petclinic.web"/>

             <!-- ... --></beans>

          5.編寫(xiě)JSP頁(yè)面(編寫(xiě)視圖)

          /WEB-INF/views/success.jsp:
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
             <title>Title</title>
          </head>
          <body>
             Hello,World!
          </body>
          </html>

          6.簡(jiǎn)單說(shuō)明及測(cè)試

            控制器return返回了視圖的名稱,我們?cè)赟pringMVC 中設(shè)置了如何解析處理器返回值為視圖。

            所以當(dāng)我們?cè)L問(wèn)/helloworld后我們會(huì)被處理器跳轉(zhuǎn)到success.jsp頁(yè)面。

          如有文章對(duì)你有幫助,

          在看”和轉(zhuǎn)發(fā)是對(duì)我最大的支持!

          剛剛整理好了的第五版《Java大廠面試題》,而且已經(jīng)分類 25 PDF累計(jì) 2098頁(yè)!

          整理的面試題,內(nèi)容列表


          互聯(lián)網(wǎng)大廠面試題,怎么領(lǐng)取?

           注意,不要亂回復(fù) 
          (一定要回復(fù) 面試題 )否則獲取不了

          (加好友,還能邀請(qǐng)進(jìn)Java群 


          覺(jué)得不錯(cuò),請(qǐng)點(diǎn)個(gè)在看

          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91视频一区 | 亚洲性爱无码 | 人人入人人草 | 久久Y成人电影 | 91黄色电影在线观看 |