Servlet、SpringMVC、Struts2對請求-響應模式實現

    從整個B/S程序的運行結構來看,J2EE的表示層解決方案實際上是對“請求-響應”模式的一種實現。既然謂之“請求-響應”也就勢必存在着兩大溝通角色: 請求對象和響應對象。Servlet、SpringMVC、Struts2對請求-響應的實現是分別基於參數-參數模式、參數返回值、和POJO模式的,由於這兩大角色的承載載體和編程語言實現基礎都不同,因此三種模式的可謂風格迥異。


參數-參數模式
參數-返回值模式
POJO模式
請求方
方法參數
方法參數
屬性變量
響應方
方法參數
返回值
屬性變量

 【參數-參數模式】

     Servlet對象是運行在行爲模式(只有一系列方法的定義,而不包含屬性的定義),在Servlet中請求的內容和響應的內容分別被封裝在HttpServletRequest對象中和HttpServletResponse對象中,也就是說請求和響應均存在於方法的參數列表中,因此Servlet對象又叫“無狀態對象”。這 裏實際上有一點“數據與行爲分離”的意味。也就是說,在Servlet處理請求的過程中,其實也是Servlet中響應方法內部的邏輯執行過程中,如果需 要處理請求數據或者返回數據,那麼我們需要和HttpServletRequest打交道;如果需要處理執行完畢之後的響應結果,那麼我們需要和 HttpServletResponse打交道。 基於這種模式的請求-響應模式稱爲參數-參數模式。參數-參數模式是一種最爲基礎的請求響應實現機制,也是底層規範不得不採用的一種機制。也就是無論參數-返回值、POJO模式的實現都是依賴於依賴於參數-參數模式。

【參數-返回值模式】

    而在SpringMVC的Controller使用的是使用參數-返回值實現模式,參數-返回值模式是一種最爲直觀的請求-響應實現模式,SpringMVC中對於Controller的定義如下:wKiom1Pg23OjY8F0AADufMXIlB8915.jpg

        方 法的參數(email和password)被視作是Http請求參數的概括。而在這裏,它們已經被SpringMVC的框架有效處理並屏蔽了內在的處理細 節,呈現出來的是與請求參數名稱一一對應的參數列表。而返回值ModelAndView則表示Http的響應是一個數據與視圖的結合體,表示Http的處 理結果。 而方法體本身,再其內部包含了邏輯處理的整個過程

【POJO模式】

    最後Struts2對請求-響應的實現是通過POJO對象,請求參數和響應內容全部以POJO內部屬性而存在,傳統Servlet模式中的禁地Controller中的屬性變量被合理利用了起來作爲請求處理過程中的數據部分。POJO模式顛覆了前兩種實現模式以java類中的方法的語法特性爲原型基礎進行請求響應的的傳統模式。POJO模式是對Servlet模式的一個重大改進。POJO實現模式是一種具有革命性意義的模式,因爲它能夠把解耦合這樣一個觀點發揮到極致。從面向對象的角度來看,POJO模式無疑也是所有程序員所追求的一個目標。這也就是Struts2那麼多年來經久不衰的一個重要原因。

    三種不同實現模式存在着一些分歧,他們之間的主要分歧在於:不同的實現模式使用了不同的編程元素(方法參數、方法返回值、類的屬性)來表達請求-響應模式中不同的邏輯語義。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章