幾乎所有基於Java的web app都需要Model 2 (part II) (轉)
幾乎所有基於的 app都需要Model 2
當Web容器從客戶端接收到一個請求時,控制流開始執行。所有的請求都被傳遞給控制器。由控制器決定將請求傳遞給哪個檢視.圖 1 僅羅列出了一個檢視,但在實際應用中,通常會有多個檢視。客戶端程式請求的檢視會JavaBean中的方法並且返回一個Reaponse給web容器,由web容器將這個Response物件傳遞給客戶端程式。
控制器Servlet使用ResquestDispatcher物件將請求推向它們對應的檢視(頁面),URL中的一個引數將決定了將請求傳送到哪個檢視,一旦我們研究了一個基於這種的簡單案例後,一切將會變的更加清晰化。從現在開始,始終記住使用Model 2架構構建你的web應用,除非你的規模很小而且將來還是很小。
一個基於Model 2應用的例項
我即將討論的這個應用是一個登陸應用系統,名/密碼已經硬性地寫進了系統程式碼當中。它由一個Servlet(作為控制器)和兩個Jsp 頁面(檢視)組成,為了簡單起見,我們省略了模型部分,但你能更改這個應用,可以建立一個登陸名和密碼的表,然後開啟一個從檢視到資料庫的一個JC連線,來校驗這個使用者。
控制器Servlet如x">Listing 1中所示,Jsp頁面中,一個叫Login.jsp (看">Listing 2) 另一個叫Welcome.jsp(看).當使用者請求這個應用的預設頁時,Login.Jsp將被第一個顯示,如果登陸成功程式會轉到Welcome.jsp頁面,如果登陸失敗,程式跳轉會Login.jsp,同時顯示一些錯誤資訊。
其中,我們最關心的部分就是控制器是如何決定將請求傳送到合適的Jsp頁面的。讓我們看一下Listing1的Service方法中的程式碼,Service方法檢查儲存在ServletRequest物件中的一個叫login的引數.如果引數沒被發現,Servlet將請求推到登陸頁面:
if (login==null) {
RequestDispatcher rd = request.getRequestDispatcher("/Login.jsp");
rd.forward(request, response);
}
因此,當使用者第一次請求應用程式,由於在request物件中不存在login引數,系統會顯示出Login.Jsp頁面。
如果程式找到login引數,控制器就知道了使用者正在嘗試登陸系統。這時Servlet會檢查是否使用者名稱是"Taronga",登陸密碼是否為"Zoo"。如果是, Servlet將請求分發到Welcome.jsp程式。
if (pass!=null && userName.equals("Taronga") && password.equals("Zoo")) {
// login succesul
RequestDispatcher rd = request.getRequestDispatcher("/Welcome.jsp");
rd.forward(request, response);
}
否則,應用程式會在ServletRequest 物件中設定一個叫Error的屬性,並賦值,然後將使用者返回到Login.jsp。由於這個叫Error的屬性的存在,Login.jsp會顯示一個錯誤資訊。
全文結束
Translated by DNA
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974790/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 幾乎所有Web和移動應用都容易受攻擊Web
- 幾乎所有程式語言的hello, world程式(2)
- 百寶箱:幾乎所有專案都會用到的Portlet開發
- 幾乎所有AMD Ryzen晶片都易受側通道SQUIP攻擊晶片UI
- 幾乎所有程式語言的hello, world程式(1)
- 幾乎所有程式語言的hello, world程式(3)
- 《effective java》讀書筆記2(對於所有物件都通用的方法)Java筆記物件
- Delphi物件模型(Part II) (轉)物件模型
- 基於Chappie-II的二次開發日誌-2APP
- SYSTEM32 下的幾乎所有檔案的簡單說明
- 為什麼幾乎整個網際網路行業都缺Web前端工程師?行業Web前端工程師
- 開發數學系統時,需要掌握的幾個基於Web的數學框架Web框架
- On Designing Good Libraries -- Part II (轉)Go
- 【java web】--JSP model1和model2的聯絡和區別JavaWebJS
- Java 2 圖形設計卷II——第2章 applet和應用程式 (轉)JavaAPP
- 學習Java大資料都需要哪些基礎Java大資料
- 我們破解了幾乎所有旗艦手機的人臉識別,iPhone倖免於難iPhone
- iOS App間相互跳轉漫談 part2iOSAPP
- 基於Chappie-II的二次開發日誌-1APP
- 關於所有馬的顏色都相同
- 中文web-app_2_3.dtd (轉)WebAPP
- 2. MySQL Galera Cluster全解析 Part 2 基於認證的複製MySql
- Pew:幾乎所有政治推文只來自10%的小部分Twitter使用者
- 一條簡訊直接崩潰iPhone,幾乎所有iOS裝置躺槍iPhoneiOS
- 解決了幾乎所有Delphi+Access同仁的問題—動態建立、壓縮Access資料庫(*.MDB) (轉)資料庫
- 這幾道Java集合框架面試題在面試中幾乎必問Java框架面試題
- 基於JAVA WEB的醫藥管理系統JavaWeb
- 基於HT for Web向量實現2D葉輪旋轉Web
- 「譯」MotionLayout 介紹 (part II)
- Business Objects Query Builder – Part IIObjectUI
- 基於小端規則的幾個java方法Java
- 關於code::blocks的幾點注意 part1BloC
- Java程式設計師都需要懂的「反射」Java程式設計師反射
- java基礎:遍歷m取n的所有組合(轉)Java
- [Android] 關於 Model 層的幾點思考(一)Android
- Spark 是一個基於Java的微Web框架SparkJavaWeb框架
- Java或Web中解決所有路徑問題 (轉載)JavaWeb
- 俄羅斯最大IT公司Yandex原始碼被洩露,涵蓋幾乎所有旗下產品原始碼