JSP設計模式
關於JavaBean的產生原因和JSP開發模式的一個演變可以參照如下示例圖
兩種web應用程序的開發模式,一種是JSP+JavaBean模式,一種是Servlet+JSP+JavaBean模式。
JSP+JavaBean模式適合開發業務邏輯不太復雜的web應用程序(因為業務邏輯復雜,控制代碼多,而在JSP中編寫控制代碼,十分不便),這種模式下,JavaBean用於封裝業務數據,JSP即負責處理用戶請求,又顯示數據。(JSP中編寫業務控制邏輯代碼)
Servlet+JSP+JavaBean(MVC)模式適合開發復雜的web應用,在這種模式下,servlet負責處理用戶請求(控制器,連接模型和視圖,對整個業務流程進行控制,調用JavaBean封裝處理數據,調用JSP顯示頁面),jsp負責數據顯示,javabean負責封裝數據(Model 模型功能)。 Servlet+JSP、JavaBean模式程序各個模塊之間層次清晰,web開發推薦采用此種模式。
關於JavaWeb_MVC模式可以參見之前的博客http://blog.csdn.net/megustas_jjc/article/details/52922859,在此不再細說。(其中JavaBean符合Model,JSP符合View,Servlet符合Controller)
JavaBean
(1)什么是JavaBean
1、是一個Java 類
2、必須存在無參數構造方法
3、所有成員變量都是private
4、私有化的屬性必須通過public類型的方法暴露給其它程序,並且方法的命名也必須遵守一定的命名規范。即如果想private成員變量被外界訪問,提供public的get和set方法。
編寫好JavaBean組件,其他程序可以通過反射技術實例化JavaBean對象,並且通過反射那些遵守命名規范的方法,從而獲知JavaBean的屬性,進而調用其屬性保存數據。 關於反射技術,參考http://blog.csdn.net/megustas_jjc/article/details/52769688,這里需要注意不要將JavaBean與單例模式混淆(通過內省Introspection,也可以對JavaBean進行操作,Introspection對JavaBean通過反射技術操作,出國留學內省是一套基於反射技術,更易於操作JavaBean的API)
單例模式
1、private 構造方法
2、private static 實例對象
3、public static 對象訪問方法
單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。如下是一個Java代碼實例:
一些資源管理器常常設計成單例模式。在計算機系統中,需要管理的資源包括軟件外部資源,譬如每台計算機可以有若干個打印機,但只能有一個Printer Spooler, 以避免兩個打印作業同時輸出到打印機中。每台計算機可以有若干傳真卡,但是只應該有一個軟件負責管理傳真卡,以避免出現兩份傳真作業同時傳到傳真卡中的情況。每台計算機可以有若干通信端口,系統應當集中管理這些通信端口,以避免一個通信端口同時被兩個請求同時調用。
(2)使用JavaBean的原因
程序中往往有重復使用的段落,JavaBean就是為了能夠重復使用而設計的程序段落,而且這些段落並不只服務於某一個程序,而且每個JavaBean都具有特定功能,當需要這個功能的時候就可以調用相應的JavaBean。從這個意義上來講,JavaBean大大簡化了程序的設計過程,也方便了其他程序的重復使用。
JavaBean傳統應用於可視化領域,如AWT(窗口工具集)下的應用。而現在,JavaBean更多地應用於非可視化領域,同時,JavaBean在服務器端的應用也表現出強大的優勢。非可視化的JavaBean可以很好地實現業務邏輯、雅思基礎控制邏輯和顯示頁面的分離,現在多用於后台處理,使得系統具有更好的健壯性和靈活性。JSP + JavaBean和JSP + JavaBean + Servlet成為當前開發Web應用的主流模式。
(3)JavaBean的屬性
- JavaBean的屬性可以是任意類型,並且一個JavaBean可以有多個屬性。每個屬性通常都需要具有相應的setter、 getter方法,setter方法稱為屬性修改器,getter方法稱為屬性訪問器。
- 屬性修改器必須以小寫的set前綴開始,后跟屬性名,且屬性名的第一個字母要改為大寫,例如,name屬性的修改器名稱為setName,password屬性的修改器名稱為setPassword。
- 屬性訪問器通常以小寫的get前綴開始,后跟屬性名,且屬性名的第一個字母也要改為大寫,例如,name屬性的訪問器名稱為getName,password屬性的訪問器名稱為getPassword。
- 一個JavaBean的某個屬性也可以只有set方法或get方法,這樣的屬性通常也稱之為只寫、只讀屬性。
(4)在JSP中使用JavaBean
- 標簽:用於在指定的域范圍內查找指定名稱的JavaBean對象:
如果存在則直接返回該JavaBean對象的引用。
如果不存在則實例化一個新的JavaBean對象並將它以指定的名稱存儲到指定的域范圍中。
常用語法:
id屬性用於指定JavaBean實例對象的引用名稱和其存儲在域范圍中的名稱。
class屬性用於指定JavaBean的完整類名(即必須帶有包名)。
scope屬性用於指定JavaBean實例對象所存儲的域范圍,英語培訓費用其取值只能是page、request、session和application等四個值中的一個,其默認值是page。
例如:
翻譯為(即會生成一個.java文件):
代碼效果:從page返回獲得person對象,如果不為null 直接使用,如果為null 創建新的Person對象
標簽:用於在JSP頁面中設置一個JavaBean組件的屬性。
標簽:用於在JSP頁面中獲取一個JavaBean組件的屬性。
(5)實例:
首先,我們寫一個JavaBean:
JSP頁面:
因為實際開發中,主要應用model2模式,所有javabean相關標簽已經很少使用。
setProperty特殊用法
—- 根據請求數據自動封裝 Person屬性
利用最簡單的Model 1 JSP+JavaBean模式,我們可以簡單的實現一個計算器的功能:
代碼很簡單,在此就不再附上實際代碼。