《JSP應(yīng)用開發(fā)項目化教程》第5章_第1頁
《JSP應(yīng)用開發(fā)項目化教程》第5章_第2頁
《JSP應(yīng)用開發(fā)項目化教程》第5章_第3頁
《JSP應(yīng)用開發(fā)項目化教程》第5章_第4頁
《JSP應(yīng)用開發(fā)項目化教程》第5章_第5頁
已閱讀5頁,還剩37頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1本章目標JSP隱式對象JSP隱式對象應(yīng)用中常見問題1開發(fā)模式與MVC三層結(jié)構(gòu)從JSP的發(fā)展過程來看,JSP的開發(fā)模式經(jīng)歷了三個階段的變遷:階段1:JSP頁面獨立完成所有的任務(wù)模塊

(房屋交易信息系統(tǒng)中登錄、注冊功能的實現(xiàn))階段2:JSPModel1:用JSP+JavaBean實現(xiàn)兩層的開發(fā)模式。

(個人房屋信息管理、房屋信息查詢功能的實現(xiàn))階段3:JSPModel2:使用JSP+Servlet+JavaBean三層開發(fā)模式進行開發(fā),這種模式實現(xiàn)了MVC三層結(jié)構(gòu),是一種規(guī)范的開發(fā)模式。開發(fā)模式與MVC三層結(jié)構(gòu)階段1:JSP文件同時負責(zé)生成網(wǎng)頁、控制到下一個網(wǎng)頁的流程以及完成業(yè)務(wù)邏輯。問題:Html標簽和Java邏輯代碼強耦合在一起,JSP文件的編寫者必須既是網(wǎng)頁設(shè)計者,又是Java開發(fā)者。頁面的可讀性差、調(diào)試困難、不利于維護更改業(yè)務(wù)邏輯或數(shù)據(jù)可能牽涉相關(guān)的多個網(wǎng)頁。開發(fā)模式與MVC三層結(jié)構(gòu)階段2:Model1應(yīng)用了JavaWeb開發(fā)當中的兩種技術(shù)JSP:完成邏輯上的處理和顯示,接受用戶的請求和響應(yīng)給用戶數(shù)據(jù),同時還完成流程的控制處理JavaBean技術(shù):做輔助取得相應(yīng)數(shù)據(jù)。Model1模型實現(xiàn)了JSP開發(fā)的兩層模型,JavaBean成為實現(xiàn)業(yè)務(wù)邏輯的主要場所。開發(fā)模式與MVC三層結(jié)構(gòu)JSPModel1的優(yōu)點:結(jié)構(gòu)很簡單,開發(fā)人員很容易上手,適合開發(fā)一些小型的JavaWeb應(yīng)用。JSPModel1的缺點:由于它是把顯示代碼和邏輯處理代碼都放在JSP頁面當中,如果開發(fā)大型的javaWeb應(yīng)用的話,就顯得力不從心了既不便于開發(fā)人員的維護,也不便于美工人員的修改開發(fā)模式與MVC三層結(jié)構(gòu)在Model1中引入Servlet就形成了Model2模式。利用Servlet實現(xiàn)對系統(tǒng)業(yè)務(wù)邏輯的控制,Servlet是整個業(yè)務(wù)過程的控制中心。MVC是Model-View-Controller的簡稱,即模型-視圖-控制器。MVC是一種開發(fā)模式,它把應(yīng)用程序分成三個核心模塊:模型、視圖、控制器,它們各自處理自己的任務(wù)。

開發(fā)模式與MVC三層結(jié)構(gòu)視圖(View)是用戶看到并與之交互的界面。向用戶顯示相關(guān)的數(shù)據(jù)、接受用戶的輸入;不進行任何實際的業(yè)務(wù)處理;視圖向模型查詢業(yè)務(wù)狀態(tài),接受數(shù)據(jù)更新事件對界面進行同步更新。模型(Model)是應(yīng)用程序的主體部分,模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。一個模型能為多個視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個視圖重用,所以提高了代碼的可重用性??刂破鳎⊿ervlet)接受用戶的輸入并調(diào)用模型完成用戶的需求,之后能夠根據(jù)不同要求導(dǎo)航到不同的視圖頁面或其他的Servlet控制中心??刂破鞴ぷ鬟^程如下:首先控制器接收用戶的請求,并決定應(yīng)該調(diào)用哪個模型來進行處理;然后模型根據(jù)用戶請求進行相應(yīng)的業(yè)務(wù)邏輯處理,并返回數(shù)據(jù);最后控制器調(diào)用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過視圖呈現(xiàn)給用戶開發(fā)模式與MVC三層結(jié)構(gòu)MVC三層模型優(yōu)點:多個視圖能共享一個模型。同一個模型可以被不同的視圖重用,大大提高了代碼的可重用性。MVC的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據(jù)這種設(shè)計思想能構(gòu)造良好的松偶合的構(gòu)件??刂破魈岣吡藨?yīng)用程序的靈活性和可配置性??刂破骺梢杂脕砺?lián)接不同的模型和視圖去完成用戶的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強有力的手段。了解ServletServlet技術(shù)是Sun公司提供的一種實現(xiàn)動態(tài)網(wǎng)頁的解決方案,它是基于Java編程語言的WEB服務(wù)器端編程技術(shù),運行在WEB服務(wù)器端,獲得客戶端的訪問請求信息和動態(tài)生成對客戶端的響應(yīng)消息。Servlet具有獨立于平臺和協(xié)議的特性,可以生成動態(tài)的Web頁面。它擔(dān)當客戶請求(Web瀏覽器或其他HTTP客戶程序)與服務(wù)器響應(yīng)(HTTP服務(wù)器上的數(shù)據(jù)庫或應(yīng)用程序)的中間層。與傳統(tǒng)的從命令行啟動的Java應(yīng)用程序不同,Servlet由Web服務(wù)器進行加載。Servlet運行在服務(wù)器。了解Servlet一個Servlet程序就是一個實現(xiàn)了特殊接口的Java類,用于支持Servlet的Web服務(wù)器調(diào)用和運行,只能運行于具有Servlet引擎的Web服務(wù)器端。一個Servlet程序負責(zé)處理它所對應(yīng)的一個或一組URL地址的訪問請求,接收訪問請求信息和產(chǎn)生響應(yīng)內(nèi)容。Servlet與普通Java程序相比,只是輸入信息的來源和輸出結(jié)果的目標不一樣。普通Java程序所能完成的大多數(shù)任務(wù)Servlet程序都可以完成。Servlet程序具有如下的一些基本功能:獲取客戶端請求及數(shù)據(jù);創(chuàng)建對客戶端的響應(yīng)消息內(nèi)容;訪問服務(wù)器端的文件系統(tǒng);調(diào)用其它的Java類。了解Servlet一個Servlet程序就是一個在Web服務(wù)器運行的特殊Java類,這個特殊Java類必須實現(xiàn)javax.servlet.Servlet接口,Servlet接口定義了Servlet容器與Servlet程序之間通信的協(xié)議約定。ServletAPI中還提供了一個專用于HTTP協(xié)議的Servlet類,其名稱是javax.servlet.http.HttpServlet,它在GenericServlet類的基礎(chǔ)上進行了一些針對HTTP特點的擴充。為了充分利用HTTP協(xié)議的功能,Servlet類繼承HttpServlet類。了解ServletServlet的創(chuàng)建了解Servlet了解Servlet了解ServletServlet中的常用方法:(1)init()方法在Servlet的生命期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時執(zhí)行的。無論有多少客戶機訪問Servlet,都不會重復(fù)執(zhí)行init()。缺省的init()方法通常是符合要求的,但也可以用定制init()方法來覆蓋它。(2)service()方法service()方法是Servlet的核心。每當一個客戶請求一個HttpServlet對象,該對象的service()方法就要被調(diào)用,而且傳遞給這個方法一個"請求"(ServletRequest)對象和一個"響應(yīng)"(ServletResponse)對象作為參數(shù)。在HttpServlet中已存在service()方法。缺省的服務(wù)功能是調(diào)用與HTTP請求的方法相應(yīng)的doXXX功能。例如,如果HTTP請求方法為GET,則缺省情況下就調(diào)用doGet()。了解Servlet(3)doGet()方法doGet()方法是Servlet中的方法之一,用于接受由get模式提交的數(shù)據(jù),與此對應(yīng)還有一個doPost()方法,用于接受由post模式提交的數(shù)據(jù)。當一個客戶通過Html表單發(fā)出一個HTTPGET請求或直接請求一個URL時,doGet()方法被調(diào)用。與GET請求相關(guān)的參數(shù)添加到URL的后面,并與這個請求一起發(fā)送。(4)doPost()方法當一個客戶通過Html表單發(fā)出一個HTTPPOST請求時,doPost()方法被調(diào)用。與POST請求相關(guān)的參數(shù)作為一個單獨的HTTP請求從瀏覽器發(fā)送到服務(wù)器。(5)destroy()方法destroy()方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝Servlet時執(zhí)行該方法。典型的將Servlet作為服務(wù)器進程的一部分來關(guān)閉。缺省的destroy()方法通常是符合要求的,但也可以覆蓋它。了解Servlet了解Servlet復(fù)習(xí)servlet的創(chuàng)建JSP開發(fā)模式JSPmodel1JSPmodel2servlet的創(chuàng)建過程回顧MVC三層架構(gòu)模型視圖控制器Servlet的創(chuàng)建創(chuàng)建過程Web.xml文件6.2.3創(chuàng)建一個簡單的Servlet使用Servlet實現(xiàn)用戶登錄LoginCheck的主要工作:接收界面輸入調(diào)用JavaBean中的方法訪問數(shù)據(jù)庫根據(jù)訪問數(shù)據(jù)庫的情況進行頁面跳轉(zhuǎn)JSP頁面視圖層(View)LoginServlet登錄校驗Servlet控制層(C)Java業(yè)務(wù)類模型層(M)ViewControlModel創(chuàng)建一個簡單的Servlet實現(xiàn)步驟:1.創(chuàng)建login.jsp、index.jsp、error.jsp。2.編寫業(yè)務(wù)類查詢數(shù)據(jù)庫,判斷用戶是否存在。3.創(chuàng)建Servlet,定義Servlet中的doGet()方法或doPost()方法,用于接收請求數(shù)據(jù)并調(diào)用后臺類檢驗用戶登錄信息。4.修改登錄頁面登錄請求地址,將請求地址改為映射的Servlet地址。創(chuàng)建一個簡單的Servlet1.login.jsp頁面2.LoginCheck.java類(loginCheck()方法)3.LoginServlet.java類定義接收變量(用戶名、密碼)實例化后臺模型類,通過模型對象調(diào)用業(yè)務(wù)方法根據(jù)業(yè)務(wù)方法的執(zhí)行結(jié)果,進行相應(yīng)的導(dǎo)航用戶存在:設(shè)置session(username、userid、isLogined)跳轉(zhuǎn)到index.jsp頁面用戶不存在:跳轉(zhuǎn)到相應(yīng)的錯誤信息提示頁面創(chuàng)建一個簡單的ServletLoginServlet.java的創(chuàng)建過程創(chuàng)建一個簡單的ServletLoginServlet.java的創(chuàng)建過程創(chuàng)建一個簡單的ServletLoginServlet.java的創(chuàng)建過程創(chuàng)建一個簡單的Servlet4.修改登錄頁面登錄請求地址,將請求地址改為映射的Servlet地址。注:在Servlet開發(fā)過程中若是修改了Web.xml中的Servlet的配置信息,要重新發(fā)布、啟動服務(wù)器重新加載配置信息。6.2.3創(chuàng)建一個簡單的Servlet5.創(chuàng)建error.jsp頁面。6.2.3創(chuàng)建一個簡單的Servlet6.改進index.jsp頁面?;仡橲ervlet的創(chuàng)建與使用Servlet中session隱式對象的使用HttpSessionsession=request.getSession();Servlet生命周期1)當Servlet第一次被調(diào)用的時候會觸發(fā)init方法,該方法會把servlet實例加載到內(nèi)存。該方法只會被調(diào)用一次;2)然后去調(diào)用servlet的service方法;3)當?shù)诙伟ǖ诙我院缶椭苯诱{(diào)用service方法;4)當web應(yīng)用需要reload或者是關(guān)閉tomcat或者關(guān)機都會去調(diào)用destroy方法。該方法就會去銷毀servlet。下面三種情況會調(diào)用destroy方法:第一種就是關(guān)閉tomcat,第二種就是web應(yīng)用reload,第三種情況就是關(guān)機。Request與Servlet容器相關(guān)的方法Request與Servlet容器相關(guān)的方法ServletContext容器ServletContext容器1)Tomcat服務(wù)器啟動→讀入web.xml文件;2)Tomcat容器為這個應(yīng)用建立一個新的ServletContext實例,應(yīng)用的所有部分都共享這個上下文;

3)如果web.xml文件中有定義上下文的初始參數(shù),則容器首先創(chuàng)建初始參數(shù)實例;

4)把初始化參數(shù)實例的引用交給ServletContext上下文;5)容器創(chuàng)建servlet,這時建立一個新的ServletConfig對象,并且為這個ServletConfig對象提供一個ServletContext的引用;6)調(diào)用servlet的init()方法初始化servlet。請求轉(zhuǎn)發(fā)與重定向的區(qū)別請求轉(zhuǎn)發(fā)與重定向的區(qū)別請求轉(zhuǎn)發(fā)只能將請求轉(zhuǎn)發(fā)給同一個WEB應(yīng)用中的組件;而重定向還可以重定向到同一個站點上的其他應(yīng)用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源。重定向的訪問過程結(jié)束后,瀏覽器地址欄中顯示的URL會發(fā)生改變,由初始的URL地址變成重定向的目標URL;而請求轉(zhuǎn)發(fā)過程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。重定向?qū)g覽器的請求直接作出響應(yīng),響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對另外一個URL的訪問請求。重定向調(diào)用者與被調(diào)用者使用各自的request對象和response對象,它們屬于兩個獨立的訪問請求和響應(yīng)過程。請求轉(zhuǎn)發(fā)的調(diào)用者與被調(diào)用者之間共享相同的request對象和response對象,它們屬于同一個訪問請求和響應(yīng)過程。請求轉(zhuǎn)發(fā)與重定向的區(qū)別請求轉(zhuǎn)發(fā)與重定向的使用場合對于同一個WEB應(yīng)用程序的內(nèi)部資源之間的跳轉(zhuǎn),特別是跳轉(zhuǎn)之前要對請求進行一些前期預(yù)處理,并要使用HttpServletRequest.setAttribute方法傳遞預(yù)處理結(jié)果,那就應(yīng)該使用forward方法進行請求轉(zhuǎn)發(fā);不同WEB應(yīng)用程序之間的重定向,特別是要重定向到另外一個WEB站點上的資源的情況,都應(yīng)該使sendRedirect方法。通常情況下,請求轉(zhuǎn)發(fā)速度更快,而且能保持request內(nèi)的對象,要想在request對象中保存讀取的后臺數(shù)據(jù),應(yīng)該選用請求轉(zhuǎn)發(fā)導(dǎo)航。數(shù)據(jù)的保存

session.setAttribute("username",username);session.getAttribute("use

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論