最近已經有了很多相關的介紹,JSP正在成為一種卓越的Java技術,可用於建立動態Web應用程式。Java程式員之所以喜愛JSP有數不清的理由。有些人喜歡它為互動式頁面帶來的“一次編寫,處處使用”的方式;還有些人欣賞它是因為它容易學習,並且使他們可以把Java作為一種伺服器端指令碼語言來使用。但更多的還都是因為一個共同原因――使用JSP的最大好處是它能協助你有效地把表達與內容分離開。在本文中,我對下面的問題作了深入探討,那就是,如何使用JSP Model 2體繫結構獲得最佳的表達-內容分離效果。這個模型也可以被看作是通用MVC設計模式在伺服器端的一個實現。請注意,在閱讀本文之前,你需要熟悉基本的JSP和servlet編程,因為文中將不會涉及到任何文法規則問題。
不同的體系
早期的JSP規範提出了兩種用JSP技術建立應用程式的方式。這兩種方式在術語中分別稱作JSP Model 1 和JSP Model 2,它們的本質區別在於處理批量請求的位置不同。在Model 1體系中,如圖1所示,jsp頁面獨自響應請求並將處理結果返回客戶。這裡仍然存在表達與內容的分離,因為所以的資料存取都是由bean來完成的。儘管Model 1體系十分適合簡單應用的需要,它卻不能滿足複雜的大型應用程式的實現。不加選擇地隨意運用Model 1,會導致JSP頁內被嵌入大量的指令碼片段或Java代碼,特別是當需要處理的請求量很大時,情況更為嚴重。儘管這對於Java程式員來說可能不是什麼大問題,但如果JSP頁面是由網頁設計人員開發並維護的――通常這是開發大型項目的規範――這就確實是個問題了。從根本上講,將導致角色定義不清和職責分配不明,給專案管理帶來不必要的麻煩。
Model 2體繫結構,如圖2所示,是一種把JSP與servlets聯合使用來實現動態內容服務的方法。它吸取了兩種技術各自的突出優點,用JSP產生表達層的內容,讓servlets完成深層次的處理任務。在這裡,servlets充當控制者的角色,負責管理對請求的處理,建立JSP頁需要使用的bean和對象,同時根據使用者的動作決定把那個JSP頁傳給要求者。特別要注意,在JSP頁內沒有處理邏輯;它僅負責檢索原先由servlets建立的對象或beans,從servlet中提取動態內容插入靜態模板。在我看來,這是一種有代表性的方法,它清晰地分離了表達和內容,明確了角色的定義以及開發人員與網頁設計者的分工。事實上,項目越複雜,使用Model 2體繫結構的好處就越大。