1. 程式人生 > >strtus2 升級springmvc 專案改造

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 頁面 引數封裝已經資料回顯

詳細待補充