strtus2 升級springmvc 項目改造

項目strtus2 升級springmvc的改造

大概介紹spring工作原理:

Spring MVC的請求流程:

    第一步:發起請求到前端控制器(DispatcherServlet)

    第二步:前端控制器請求HandlerMapping查找Handler可以根據xml配置、註解進行查找

    第三步:處理器映射器HandlerMapping向前端控制器返回Handler

    第四步:前端控制器調用處理器適配器去執行Handler

    第五步:處理器適配器去執行Handler

    第六步:Handler執行完成給適配器返回ModelAndView

    第七步:處理器適配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一個底層對象,包括 Model和view

    第八步:前端控制器請求視圖解析器去進行視圖解析,根據邏輯視圖名解析成真正的視圖(jsp)

    第九步:視圖解析器向前端控制器返回View

    第十步:前端控制器進行視圖渲染。視圖渲染將模型數據(在ModelAndView對象中)填充到request域

    第十一步:前端控制器向用戶響應結果

項目原來結構:strtus2+spring+mybatis

改造後結構:springmvc+spring+mybatis

主要修改點

 

 

Spring MVC 和 Struts2 對比

      1). Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,所以說從架構本身上SpringMVC 就容易實現restful url

      2). 由上邊原因,SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取,處理結果通過ModelMap交回給框架,方法之間不共享變量,而Struts2搞的就比較亂,雖然方法

           之間也是獨立的,但其所有Action變量是共享的,這不會影響程序運行,卻給我們編碼 讀程序時帶來麻煩,每次來了請求就創建一個Action,一個Action對象對應一個request上下文。

      3). 由於Struts2需要針對每個request進行封裝,把request,session等servlet生命週期的變量封裝成一個一個Map,供給每個Action使用,並保證線程安全,所以在原則上,是比較耗費內存的。

      4). SpringMVC集成了Ajax,使用非常方便,只需一個註解@ResponseBody就可以實現,然後直接返回響應文本即可,而Struts2攔截器集成了Ajax,在Action中處理時一般必須安裝插件或者自己

           寫代碼集成進去,使用起來也相對不方便。

      5). springmvc面向方法開發的(更接近service接口的開發方式),struts2面向類開發。

      6). springmvc可以單例開發,struts2只能是多例開發。

 

21. 參數綁定:

      21.1 默認支持的類型

               直接在controller方法形參上定義下邊類型的對象,就可以使用這些對象。在參數綁定過程中,如果遇到下邊類型直接進行綁定。

               1). HttpServletRequest:通過request對象獲取請求信息

               2). HttpServletResponse:通過response處理響應信息

               3). HttpSession:通過session對象得到session中存放的對象

               4). Model/ModelMap:model是一個接口,modelMap是一個接口實現 。作用:將model數據填充到request域。

      21.2 簡單類型

              通過@RequestParam對簡單類型的參數進行綁定。

              如果不使用@RequestParam,要求request傳入參數名稱和controller方法的形參名稱一致,方可綁定成功。

              如果使用@RequestParam,不用限制request傳入參數名稱和controller方法的形參名稱一致。

              通過required屬性指定參數是否必須要傳入,如果設置爲true,沒有傳入參數,會報錯。

      21.3 pojo綁定

              頁面中input的name和controller的pojo形參中的屬性名稱一致,將頁面中數據綁定到pojo。(usename,age;不需要user.username,user.age)

      21.4 自定義參數綁定實現日期類型綁定

              對於controller形參中pojo對象,如果屬性中有日期類型,需要自定義參數綁定。將請求日期數據串轉成 日期類型,要轉換的日期類型和pojo中日期屬性的類型保持一致。

 

20. controller方法的返回值

      20.1 返回ModelAndView 

              需要方法結束時,定義ModelAndView,將model和view分別進行設置。 

     20.2 返回string

               如果controller方法返回string,

               1). 表示返回邏輯視圖名。真正視圖(jsp路徑)=前綴+邏輯視圖名+後綴

               2). redirect重定向:返回字符串格式爲:"redirect:queryItem.action"

               3). forward頁面轉發:返回字符串格式爲:“forward:queryItem.action”

      20.3 返回void

               在controller方法形參上可以定義request和response,使用request或response指定響應結果:

               1). 使用request轉向頁面,如下:request.getRequestDispatcher("頁面路徑").forward(request, response);

               2). 也可以通過response頁面重定向:response.sendRedirect("url")

               3). 也可以通過response指定響應結果,例如響應json數據如下:

                    response.setCharacterEncoding("utf-8");

                    response.setContentType("application/json;charset=utf-8");

                    response.getWriter().write("json串");

 

1.修改web.xml , 新增spring-mvc.xml , 刪除strtus.xml

2.pom.xml  ,引入spring-mvc 的jar包依賴,傷處strtus2 的jar包依賴

3.修改controller 把原來action類改成controller

   同時修改對應的 jsp 頁面 參數封裝已經數據回顯

詳細待補充

 

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