1. 程式人生 > >【JavaServlet學習】Sevlet+JSP+JavaBean開發模式_整理所得

【JavaServlet學習】Sevlet+JSP+JavaBean開發模式_整理所得

通常會選擇Servlet+JSP+JavaBean開發模式來開發JavaWeb專案,Servlet+JSP+JavaBean組合開發就是一種MVC開發模式了,控制器(Controller)採用Servlet、模型(Model)採用JavaBean、檢視(View)採用JSP。

 一、Web開發中的請求---響應模型

具體的步驟

  1.      web瀏覽器傳送請求,訪問某個URL http://www.iteye.com/
  2.      web伺服器(如Tomcat)接收請求,處理請求(比如使用者新增則把使用者存一下),最後產生響應,一般為html
  3.      web伺服器處理完成後,返回內容給web客戶端(瀏覽器),客戶端對接收的內容進行處理(web瀏覽器把接收到的HTML進行渲染展示出來)

都是Web客戶端發起請求,Web伺服器接收、處理併產生響應。

二、標準MVC模型概述

概念

  • Model(模型):資料模型,提供要展示的資料,包含value object(資料)和服務層(行為)
  • View(檢視):負責進行模型的展示
  • Controller(控制器):接受使用者請求,委託給模型進行處理(狀態改變),處理完畢後將返回的資料模型返回給檢視,用於排程

在標準的MVC中模型能主動推資料給檢視進行更新(觀察者設計模式,在模型上註冊檢視,當模型更新時自動更新檢視),Web開發中模型是無法主動推給檢視(無法主動更新使用者介面),因為在Web開發是請求-響應模型。

三、web MVC概述

Servlet+JSP+JavaBean架構其實可以認為就是我們所說的Web MVC模型,只是控制器採用Servlet、模型採用JavaBean、檢視採用JSP

(一)、模型(Model)

(二)、檢視(View)

(三)、控制器(Controller)

四、Servlet+JSP+JavaBean開發模式的缺點

(一)Servlet作為控制器的缺點

  此處的控制器使用Servlet,使用Servlet作為控制器有以下幾個缺點:

  1、控制邏輯可能比較複雜,其實我們可以按照規約,如請求引數submitFlag=toLogin,我們其實可以直接呼叫toLogin方法,來簡化控制邏輯;而且每個模組基本需要一個控制器,造成控制邏輯可能很複雜。現在流行的Web MVC框架(如Struts2)都支援"請求引數submitFlag=toAdd,就可以直接呼叫toAdd方法

"這樣的處理機制,在Struts2中類似這樣的處理機制就稱為"動態方法呼叫"

  2、請求引數到模型的封裝比較麻煩,如果能交給框架來做這件事情,我們可以從中得到解放。

  請求引數到模型的封裝程式碼:

 // 1收集引數
 String username = req.getParameter("username");
 String password = req.getParameter("password");
 // 2封裝引數
 UserBean user = new UserBean();
 user.setUsername(username);
 user.setPassword(password);

  當有幾十個甚至上百個引數需要封裝到模型中時,這樣寫恐怕就痛苦萬分了,要寫幾十次甚至上百次這樣的程式碼,估計寫到吐了,所以現在流行的Web MVC框架(如Struts2)都提供了非常方便的獲取引數,封裝引數到模型的機制,減少這些繁瑣的工作。

  3、選擇下一個檢視,嚴重依賴Servlet API,這樣很難或基本不可能更換檢視。

例如:使用Servlet API提供的request物件的getRequestDispatcher方法選擇要展示給使用者看的檢視

  private void toLogin(HttpServletRequest req, HttpServletResponse resp)
             throws ServletException, IOException {
     //使用Servlet API提供的request物件的getRequestDispatcher方法選擇檢視
      // 此處和JSP檢視技術緊密耦合,更換其他檢視技術幾乎不可能 
     request.getRequestDispatcher("/mvc/login.jsp").forward(request, response);
 }

  4、給檢視傳輸要展示的模型資料,也需要使用Servlet API,更換檢視技術也要一起更換,很麻煩。

例如:使用Servlet API提供的request物件給檢視傳輸要展示的模型資料

//使用Servlet API提供的request物件給檢視login.jsp傳輸要展示的模型資料(user)
request.setAttribute("user", user);
request.getRequestDispatcher("/mvc/login.jsp").forward(request, response)

(二)JavaBean作為模型的缺點

  此處模型使用JavaBean,JavaBean元件類既負責收集封裝資料,又要進行業務邏輯處理,這樣可能造成JavaBean元件類很龐大,所以一般現在專案都是採用三層架構,而不直接採用JavaBean

(三)檢視的缺點

  現在被繫結在JSP,很難更換檢視,比如Velocity、FreeMarker;比如我要支援Excel、PDF檢視等等。

  關於JavaWeb的兩種開發模式的講解就介紹到這裡,下一篇將使用servlet+jsp+javabean來開發一個使用者登入註冊功能,以此來加深servlet+jsp+javabean開發模式的理解。