幾乎所有基於Java的web app都需要Model 2 (part II) (轉)

themoney發表於2007-10-05
幾乎所有基於Java的web app都需要Model 2 (part II) (轉)[@more@]

 幾乎所有基於的 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章