標籤:j2ee設計模式 jsp dao mvc
今天在看李興華《JavaWeb實戰經典》時候,看到了用JSP+DAO整合起來做了一個資料庫的增刪改查操作。程式不難,但是具備借鑒意義。一般來說javaweb項目主要操作就是操作資料庫,其本質也就是操作資料庫。什麼mvc,javabean從某種角度都是多餘的,如果使用者會寫sql,那要View幹什麼,直接資料庫尋找不就好了?
一般來說可以實現一個最簡單BS項目,可以有這麼幾個模式:
1 JSP + JDBC 這樣寫jsp裡面全是java代碼,很不利於維護與擴充。
2 JSP + DAO 這樣商務邏輯還是寫在jsp裡面了
3 JSP + Servlet + JDBC(MVC) 這樣好處是可以在跳轉servlet時候調用下層服務,也就是商務邏輯。(JSP頁面美觀化可以使用EL,JSTL)
4 各種架構組合。Spring,Struts,Hibernate。Spring是接管所有層的架構。Struts是web層的架構,Hibernate是持久層架構。據我所知,持久層成熟產品很多,單就資料連線池這裡有C3P0,Apache 的DBCP,Alibaba Druid(號稱世界上最快的串連池),總之java世界裡,只要想不到,沒有實現不了的。
5 以上只是單機情況下的架構,如果到了分布式環境以及高並發環境下,設計的複雜程度將跨越一個數量級。分布式環境下的session,cookies怎麼放?怎麼設計分布式session架構?JVM怎麼調優?I/O讀取?.....暫時沒研究。
畫了一章李興華老師書裡案例的呼叫歷程圖:
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M00/7E/8A/wKioL1cEC9eSqcm4AAGwh9_zSRo740.jpg" title="GotoHibor23875500.jpg" alt="wKioL1cEC9eSqcm4AAGwh9_zSRo740.jpg" />
例子雖然不難,但是用了兩個Java設計模式以及介面解耦,還用了J2ee設計模式:有DAO模式,還有VO模式(其實就是JavaBean,傳對象可以減少網路開銷)。覺得案例很不錯。也明白了為什麼在相鄰JSP跳轉的時候必須經過一個servlet,而這是這個servlet調用了下層服務。遠比JSP裡面調用要方便和更具備模組化。
後面又把圖修改了下:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/7E/8E/wKiom1cEFADCVJw8AANbVw9RCnk339.jpg" title="mvc.jpg" alt="wKiom1cEFADCVJw8AANbVw9RCnk339.jpg" />
可以看出,分層思想在其中起到核心作用。每一層做自己職責內的事情,多管閑事帶來程式複雜度提高。業務一複雜就介面感覺很亂。其實分層是種抽象,邏輯上的分層,實際上就是多寫了幾個JSP和Java檔案而已麼。
這個程式雖然不難,但是這麼一個程式裡面的設計思想以及設計模式很值得思考。Java中有GOF23設計模式,在J2ee中也有21種設計模式,兩大設計模式派系。
有圖為證:
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/7E/8A/wKioL1cED9aCCjaPAAN6YlGDR-Y881.jpg" title="GotoHibor25538705.jpg" alt="wKioL1cED9aCCjaPAAN6YlGDR-Y881.jpg" />
看來我又要薦書了:
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M00/7E/8E/wKiom1cED5SwwHtrAADuxLdUzro463.jpg" title="j2ee.jpg" alt="wKiom1cED5SwwHtrAADuxLdUzro463.jpg" />
又看到幾張好圖:
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/7E/8A/wKioL1cEEGiSG1jwAADhksqb7aU534.jpg" title="GotoHibor25804468.jpg" alt="wKioL1cEEGiSG1jwAADhksqb7aU534.jpg" />
睡了,好累!
寫了這麼久,才1000字,暈!
JSP+DAO實現資料庫的CRUD