【JavaServlet學習】Sevlet+JSP+JavaBean開發模式_整理所得
通常會選擇Servlet+JSP+JavaBean開發模式來開發JavaWeb專案,Servlet+JSP+JavaBean組合開發就是一種MVC開發模式了,控制器(Controller)採用Servlet、模型(Model)採用JavaBean、檢視(View)採用JSP。
一、Web開發中的請求---響應模型
具體的步驟
- web瀏覽器傳送請求,訪問某個URL http://www.iteye.com/
- web伺服器(如Tomcat)接收請求,處理請求(比如使用者新增則把使用者存一下),最後產生響應,一般為html
- 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方法
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開發模式的理解。