一、Servlet
Servlet是用於開發動態web資源的技術,Servlet部署在web服務器上,被動地接收web瀏覽器的請求,並將處理結果通過響應告知用戶。
Servlet的執行過程:
1. web瀏覽器向web服務器提出http請求。
2. web服務器解析請求的主機,應用和web資源
3. 如果是初次訪問該servlet,則創建servlet對象,並調用Init()方法,否則下一步
4. 調用servlet對象的service方法,並生成新的HttpRequest和HttpResponse對象,傳入該servlet對象。在service方法中,會調用doPost()或doGet()方法,處理請求。
5. servlet返回響應信息,web服務器返回響應信息。
二、JSP
jsp 是包含HTML代碼和JAVA代碼的java server page.
jsp執行的是jsp的class文件,其原始的java代碼繼承與HttpJspBase類,而HttpJspBase類繼承與HttpServlet類。
jsp擁有九大對象,其中page,HttpResponse和HTTPRequest對象已經被實例化。
三、JavaBean
JavaBean是滿足某些特定書寫規則並實現某些功能的JAVA類。
- 具有一個無參的構造函數
- 屬性必須私有化
- 私有化的屬性通過public類型的方法暴露給其它程序
JavaBean在javaweb中的主要應用是封裝數據。對於遵循以上寫法的JavaBean組件,其它程序可以通過反射技術實例化JavaBean對象,並且通過反射那些遵守命名規範的方法,從而獲知JavaBean的屬性,進而調用其屬性保存數據。
JSP頁面包含三個JavaBean的標籤。
<jsp:useBean id="Name" class="package.class" scope="page"/>
<jsp:setProperty name="Name" property= "*" />
<jsp:getProperty name="Name" property="PropertyName" />
<jsp:useBean>
標籤會在指定範圍內指定類的指定名稱的對象,如果沒有找到,則實例化一個對象。
<jsp:setProperty
標籤可以通過自省機制,將網頁表單提交的屬性值封裝在javaBean的對象中。
<jsp:getProperty>
標籤通過調用getter方法,獲得該對象的某個屬性的值。
四、Servlet+JSP+JavaBean開發模型與MVC模型
1、典型的MVC模型
- Model模型:主要用於業務邏輯的處理,對數據進行增刪改查。
- View視圖:展示模型數據,並提供人機交互界面,用於功能請求等。
- Controler控制器:接收用戶的請求,委託模型進行處理,選擇視圖展示返回數據。
2、Servlet+JSP+JavaBean開發模式
在web應用中,不考慮websocket和HTML5等技術,基本上web服務器不會主動地反饋信息給web瀏覽器,因此,Model不會主動將模型推給視圖。並且,Model的數據獲取和修改都依賴數據庫。因此,Servlet+JSP+JavaBean開發模型下的MVC模型如下圖所示:
3、Servlet+JSP+JavaBean開發模式的缺點
- Servlet作爲Controller的缺點
- 請求參數到模型的封裝比較麻煩
- 控制邏輯可能比較複雜
- 選擇下一個視圖,嚴重依賴Servlet API
- 給視圖傳輸要展示的模型數據,也需要使用Servlet API
- JSP作爲View的缺點
- 很難更換視圖,比如Velocity、FreeMarker
- JavaBean作爲Model的缺點
- JavaBean組件負責收集封裝數據,業務邏輯處理,造成JavaBean組件類很龐大