標籤:
在學習完servlet之後,老師講解了一個MVC模型,將我們練習的項目進行升級,之前我們的代碼全是在jsp裡面寫的,也就是說網頁裡的有大量的java代碼。在寫頁面的邏輯的時候很方便,在網頁裡直接寫,寫完下面就能用,但是裡面的邏輯處理太多,這就是一個大問題,任何人都可更改源碼使結果發生改變,這樣設計出來的網頁沒有任何安全性而言。
升級後的項目採用的是最普通的MVC模型,即一個請求一個servlet,但是這樣重複代碼太多,開發效率大大降低,在這個基礎之上,老師講了一個MVC模型,將servlet當作控制器,根據請求傳過來的參數來判斷實行哪個方法,採用的方法是在servlet的init()方法中將各個請求和對應的java類放入map集合中,每過來一個請求,從map集合中擷取對應的 java類,然後執行相應的execute方法,傳遞的參數都為httprequest和httpresponse,如所示:
這種模式有一個問題就是寫入程式碼,每次增加一個方法就要對java檔案進行重新編譯,這種開發模式不建議使用,後期維護比較麻煩。
在這個模式的基礎上,老師又講解了另外一個更新的MVC模式,就是將請求的欄位和對應的java類、方法名、傳回值等等資訊放在一個xml檔案中,將這個xml檔案的一級element作為一個java類,element的屬性作為這個java類的field,同時這個java類需要一個map集合,添加二級element的資訊。二級element則添加兩個這個類對應方法的傳回值、跳轉頁面以及是否是轉寄,根據傳回值來判斷跳轉到哪個頁面,二級element也需要抽象成一個java類(屬性大於兩個的時候,也可以不抽取),方便後期擷取對應的資訊。採用這個方法,要使用digester這個工具類,自動讀取xml檔案的內容,並且將element的屬性添加到對應的類裡,根目錄需要一個map集合,可以根據不同的請求來擷取不同的java類。當一個請求過來的時候,通過map集合的get()方法,得到對應的java類,然後根據這個類的屬性(可以在xml檔案中添加方法的名稱等等屬性)擷取相應的方法名,根據反射的原理來調用這個類對應的方法。方法的傳回值類型為字串,這個方法的傳回值就是二級element的一個屬性,根據這個類的map集合的get()方法,擷取二級element類,包含了目標頁面,同時也包含了是轉寄還是重新導向;在servlet控制器雷根據二級類的屬性來判斷是轉寄還是重新導向。這樣一個servlet就解決了所有的訪問的問題,而且以後如果需要更改目標頁面,只需要在xml檔案中更改配置資訊就行,這個方法實現了軟體的軟編碼,利於擴充和維護。
Xml檔案如下:
Servlet的init()方法如下:
?
Servlet的service方法如下:
?
具體設計思路如所示:
JAVA Web中的MVC模型