MVC模式與三層架構和表示層


1.MVC模式
    - Model-View-Controller
    - 模型-視圖-控制器
    - Model(模型)
        > 模型分為業務模型,和數據模型
        > 模型負責處理業務邏輯以及和數據庫進行交互
        > Service和DAO
 
    - View(視圖)
        > 視圖用來渲染模型,將模型以頁面的形式展現給用戶
        > JSP
 
    - Controller(控制器)
        > 負責接收請求,調用模型處理請求,然后選擇視圖渲染模型
        > Servlet
 
三層架構   
    表示層
        JSP+Servlet
 
    業務邏輯層
        Service
 
    持久化層
        DAO
 
MVC和三層架構都是為了軟件的層與層之間的解耦,其實我們日常開發的項目的實際上是綜合了三層架構和MVC兩種形式。
 
 
表示層:
    HTML擅長顯示一個靜態的網頁,HTML並不能運行Java程序
 
    Servlet擅長調用Java程序,但是不擅長顯示一個網頁
 
    HTML+Servlet=JSP
 
1.JSP
    [1] 簡介
        > Java Server Pages
        > Java的服務器頁面
        > JSP是需要運行在服務器中,不能脫離服務器運行
        > JSP的本質就是一個Servlet
        > JSP就是一個披着HTML皮的Servlet
 
    [2] 運行原理
        > 我們在訪問JSP時,服務器會先將JSP翻譯為一個Servlet,然后再去調用Servlet去處理請求
        > jsp文件 --翻譯--> java文件 --編譯--> class
        > 服務器翻譯過的java文件,和編譯好的class文件都會放到Tomcat服務器的work目錄下
        > 被服務器翻譯生成java文件,該類已經繼承HttpJspBase
            而HttpJspBase又繼承HttpServlet。
          而在總的web.xml文件中又發現JSP對應Servlet的配置信息
            由此證明,JSP就是一個Servlet。
 
    [3] 基本語法
        > 模板元素   
            - 模板元素就是JSP中HTML代碼
            - 模板元素中的內容會作為out.write()的參數輸出到頁面中來
            - 所以我們可以像編寫一個HTML網頁一樣,在JSP中編寫HTML代碼
 
        > 腳本片段   
            - <% %>
            - 在腳本片段可以直接編寫Java代碼
            - 腳本片段中內容會原封不動的復制到JSP對應Java文件的的service方法中的指定位置
            - 所以在service()方法中可以寫什么,在腳本片段中就可以寫什么
            - 在JSP頁面中可以編寫多個腳本片段,但是多個腳本片段之間要保證結構完整
 
        > 表達式
            - <%= %>
            - 表達式可以用來將一個對象輸出到頁面中
            - 表達式中的內容,會作為out.print()的參數,最終輸出到頁面
            - 所以out.print()可以接收什么參數,則表達式中就可以些什么
            - 而該方法可以接收Object類型的參數,所以表達式可以傳遞任意的Java對象
 
        > 注釋
            - <%-- --%>
            - JSP注釋中的內容將不會被翻譯到java文件中,只能在jsp頁面中看見
            - JSP中一共可以使用三種注釋:
                1.jsp注釋 <%-- --%>
                2.HTML注釋 <!-- -->
                3.Java注釋 // /**/ java注釋只能在腳本片段寫
 
        > 聲明
            - <%! %>
            - JSP聲明中的內容將會被寫入到JSP對應的java類中
            - 所以在類中可以寫什么,在聲明中就可以寫什么
            - 但是這個沒什么用
 
    [4] JSP指令
        > JSP指令用來告訴JSP引擎,如何來翻譯我們的JSP文件
        > JSP指令一共有三個:page include taglib
 
        > 格式:<%@ 指令名 屬性名1=”屬性值1” 屬性名2=”屬性值2”  %>
            - page指令
                - import:用來導包的
                - errorPage:當頁面出現異常時轉發到的頁面
                - isErrorPage:當前頁面是否是一個錯誤頁面,需要一個布爾值,默認是false
                    如果設置為true,則可以在頁面中使用exception對象
                - isELIgnored:是否忽略EL表達式,需要布爾值,默認值是false,不忽略,一般不動
                - session:頁面中是否可以直接使用session對象,需要一個布爾值,默認值為true,可以使用。一般不動
                - contentType:設置響應內容及編碼,實際上就是設置Content-Type這個響應頭的
                - pageEncoding:當前JSP頁面使用的編碼,jsp引擎需要根據該編碼去解析JSP文件
 
                - language:jsp將被翻譯成的語言,默認值是java,可選值java
                - extends:指定jsp翻譯為java文件要繼承的父類
                - info:設置JSP的信息
 
            - include指令
                - <%@ include file="/include/2.jsp" %>
                - include指令用來將一個頁面包含進另一個頁面
                - include指令是靜態包含,使用該指令相當於將另一個頁面,
                    原封不動的復制到當前頁面的指定位置
                - 使用靜態包含,只會翻譯當前頁面,而不會翻譯被包含頁面
 
    [5] JSP動作標簽
        > 格式:<jsp:標簽名 屬性名="屬性值"></jsp:標簽名>
        - 原理:
            JSP動作標簽,最終在java文件中,都會被轉換成java代碼
            - 標簽就是以標簽的形式,去調用Java代碼
        -     <jsp:forward page="/index.jsp">
                <jsp:param value="zhubajie" name="username"/>
            </jsp:forward>
            用來做請求的轉發,我們還可以通過forward標簽內部使用param標簽,為轉發附加請求參數
 
        -     <jsp:include page="/include2/2.jsp"></jsp:include>   
            作用:將一個頁面包含進另一個頁面
                    jsp:include和include指令不同,include指令是靜態包含,而jsp:include是動態包含
                  它會同時將當前頁面和被包含頁面都翻譯為java文件
                    它是通過這行代碼來包含另一個頁面:
                    org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/include2/2.jsp", out, false);
 
    [6] 隱含對象
        > 隱含對象指的是可以直接在JSP中使用的對象
        > JSP中一共有九大隱含對象,這九個對象都可以在JSP中直接使用
        > 在JSP對應的Servlet中以及對這個九個變量進行聲明並賦值
        > 九個隱含對象中有四個是域對象
        > 九大隱含對象有:
            1.pageContext
                類型:PageContext
                作用:通過pageContext可以獲取到頁面中的其他隱含對象
 
            2.request
                類型:HttpServletRequest
 
            3.session
                類型:HttpSession
 
            4.application
                類型:ServletContext
 
            5.response
                類型:HttpServletResponse
                作用:代表服務器發送給瀏覽器的響應報文
                        和Servlet中的response一樣,但是在JSP中這個對象不太常用
 
            6.out
                類型:JspWriter
                作用:通過out對象向瀏覽器輸出一個內容
 
 
            7.config
                類型:ServletConfig
                作用:代表當前JSP的配置信息,基本不用
 
            8.page
                類型:Object
                作用:在JSP對應的Java文件中有這么一行代碼:Object page = this;
                        page代表的當前對象,不咋用
 
            9.exception
                類型:Throwable
                作用:代表頁面中的異常信息,可以通過該對象獲取到頁面中的異常
 
    [7] 域對象
        > 域指區域,地區,范圍,在WEB項目中同樣也存在很多不同的區域:
            不同的JSP頁面、不同Servlet。總之,不同的WEB資源就是一個一個不同的區域。
        > 域對象的主要作用就是在不同的WEB資源之間共享數據。
        > JavaWeb中一共有四個域對象pageContext、request、session、application
        > 在JSP中可以獲取到全部四個域對象,而在Servlet中只能獲取三個,獲取不到pageContext
        > 所有的域對象的內部,都維護着一個Map,這個Map用來保存屬性
        > 域對象共有的3個方法:
            void setAttribute(String name , Object value) --> 以指定的屬性名在域對象中保存一個屬性
            Object getAttribute(String name) --> 根據屬性名從域中獲取一個屬性值
            void removeAttribute(String name) --> 從域中移除一個指定的屬性
 
            - pageContext
                - 類型:PageContext
                - 作用:當前頁面
                        代表page域的域對象,作用范圍就是當前頁面
                            一旦切換頁面,則域中的屬性全部丟失
                                該域對象主要在標簽中使用
 
            - request
                - 類型:HttpServletRequest
                - 作用:當前請求
                        代表的是request域的域對象,作用范圍時當前請求
                            一旦發送多個請求,則域中的屬性會全部丟失
                                注意:request域中的屬性在轉發時有效
                                    重定向時request域中屬性會全部丟失
 
            - session
                - 類型:HttpSession
                - 作用:當前會話,會話指一次打開瀏覽器到關閉瀏覽器的過程
                        代表的是session域的域對象,一旦結束會話(關閉瀏覽器),
                            則session域中屬性全部丟失
 
            - application
                - 類型:ServletContext
                - 作用:當前應用,只要服務器不停application中的屬性一直都在
                        application域
 
    [7] JSP和Servlet的分工:
        > JSP本質就是一個Servlet,所以Servlet能干的事JSP全行。
        > 所以有一段時間人們已經將Servlet完全拋棄了,
            於是我們的項目中全都變成了JSP,一個項目可能會有成百上千JSP。
        > 但是經過長時間的實踐發現,雖然JSP可以去調用java代碼,
            但是當jsp中的java代碼過多,jsp會變得非常不好維護,
                所以人們又想起了被冷落已久的Servlet。
        > Servlet和JSP實際上是各有優勢:
            Servlet擅長調用Java代碼,不擅長顯示一個頁面
            JSP擅長顯示一個動態頁面,但是不擅長編寫大量的java代碼
        > 分工:
            1.Servlet負責調用后台程序處理用戶請求
            2.JSP負責顯示動態頁面
        > 域對象使用原則:
            能用小的就不用大的
 
 
 
 

轉載請注明出處!

http://www.cnblogs.com/libingbin/

感謝您的閱讀。如果文章對您有用,那么請輕輕點個贊,以資鼓勵。

 
 
 
 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM