springmvc和struts2的差別
1、springmvc基于方法開發的,struts2基于類開發的。
springmvc将url和controller方法映射。映射成功後springmvc生成一個handler對象,對象中隻包括了一個method。方法執行結束,形參資料銷毀。
struts2的action類中的所有方法用的都是action類中的成員變量,一旦方法變得很多的時候,我們就會不知道action類中那麼多成員變量是給那個方法去使用的。十分混亂。
但是springmvc的所有參數都是定義為方法的形參,這樣使用什麼方法就将參數注入至對應方法的形參,是以springmvc的controller開發類似service開發。
2、springmvc可以進行單例開發,并且建議使用單例開發,struts2通過類的成員變量接收參數,無法使用單例,隻能使用多例。
3、經過實際測試,struts2速度慢,在于使用struts标簽,如果使用struts建議使用jstl。
最後我們無法實際定義springmvc與struts到底誰好誰壞,隻能說struts早期由于用的比較多,它的漏洞就比較多。建議如果使用struts,就使用最新的包,因為以前的可能會有漏洞。但springmv目前幾乎沒有漏洞,這就是springmvc最近幾年開始流行起來的原因,再有一個springmvc是基于方法開發的,更接近于service開發。
springmvc總結
springmvc架構:
dispatcherservlet前端控制器:接收request,進行response
handlermapping處理器映射器:根據url查找handler。(可以通過xml配置方式,注解方式)
handleradapter處理器擴充卡:根據特定規則去執行handler,編寫handler時需要按照handleradapter的要求去編寫。
handler處理器(後端控制器):需要程式員去編寫,常用注解開發方式。
handler處理器執行後結果 是modelandview,具體開發時handler傳回方法值類型包括 :modelandview、string(邏輯視圖名)、void(通過在handler形參中添加request和response,類似原始 servlet開發方式,注意:可以通過指定response響應的結果類型實作json資料輸出)
view resolver視圖解析器:根據邏輯視圖名生成真正的視圖(在springmvc中使用view對象表示)
view視圖:jsp頁面,僅是資料展示,沒有業務邏輯。
注解開發:
使用注解方式的處理器映射器和擴充卡:
在實際開發,使用<mvc:annotation-driven>代替上邊處理器映射器和擴充卡配置。
@controller注解必須要加,作用辨別類是一個handler處理器。
@requestmapping注解必須要加,作用:
1、對url和handler的方法進行映射。
2、可以窄化請求映射,設定handler的根路徑,url就是根路徑+子路徑請求方式
3、可以限制http請求的方法
映射成功後,springmvc架構生成一個handler對象,對象中隻包括 一個映射成功的method。
注解開發中參數綁定:
将request請求過來的key/value的資料(了解一個串),通過轉換(參數綁定的一部分),将key/value串轉成形參,将轉換後的結果傳給形參(整個參數綁定過程)。
springmvc所支援參數綁定:
1、預設支援很多類型,httpservletrequest、response、session、
model/modelmap(将模型資料填充到request域)
2、支援簡單資料類型,整型、字元串、日期。。
隻要保證request請求的參數名和形參名稱一緻,自動綁定成功
如果request請求的參數名和形參名稱不一緻,可以使用@requestparam(指定request請求的參數名),@requestparam加在形參的前邊。
3、支援pojo類型
隻要保證request請求的參數名稱和pojo中的屬性名一緻,自動将request請求的參數設定到pojo的屬性中。
注意:形參中即有pojo類型又有簡單類型,參數綁定互不影響。
自定義參數綁定:
日期類型綁定自定義:
定義的converter<源類型,目标類型>接口實作類,比如:
converter<string,date>表示:将請求的日期資料串轉成java中的日期類型。
注意:要轉換的目标類型一定和接收的pojo中的屬性類型一緻。
将定義的converter實作類注入到處理器擴充卡中。
springmvc和struts2差別:
springmvc面向方法開發的(更接近service接口的開發方式),struts2面向類開發。
springmvc可以單例開發,struts2隻能是多例開發。
轉載請注明出處:http://blog.csdn.net/acmman/article/details/47183585