(一)區別:
1.機制上:①:Struts2入口是--->Filter。【通實現請求轉發和初始化操作】;①SpringMVC 入口是--->Servlet。【實現請求轉發和初始化操作】。
2.性能:SpringMVC比Struts2稍快。 【①SpringMVC基於方法【一個方法對應一個request上下文】-->根據注解來注入request數據;①Struts2基於類【一個Action對象對應一個request上下文】-->一個Action對應一個請求-->再調用setter getter方法來注入request中的數據】
3.傳遞參數:①Struts2 可以用屬性接受參數。①SpringMVC不用屬性獲取。
4.設計思想上:①Struts2更加符合OOP(面向對象編程)的編程思想。 ①而SpringMVC就比較謹慎,在servlet上拓展。
5.intercepter的實現機制:①Struts2有自己的攔截器機制。①SpringMVC用的是獨立的AOP方式--->SpringMVC的配置文件比Struts2多。
6.SpringMVC驗證支持JSR303,處理起來更加靈活方便【亮點】
(二)Struts2框架
1.工作流程:
①客戶端--(發送請求)-->②經過一系列過濾器FilterDispatcher--->③過濾器去解析sruts.xml(查找相應Action,沒有則報錯;有生成代理對象)--->④一系列攔截器Interceptor--->⑤直到調用Action類中的execute()方法(會產生結果result)--->⑥結果由Struts2的處理器-->⑦核心過濾器--->⑧服務器-->⑨響應到客戶端。
圖解:(拿來主義)
2.①屬於類級別的攔截,一個請求---》對應一個Action,是基於類的。【方法之間獨立,但是action變量是可以共享】
然后調用get和set方法把request請求中的數據注入其中。
②驗證實現更加繁瑣
(三)SpringMvc框架。
1.工作流程:
①客戶端發起請求--->②DispatcherServlet(web.xml中配置前端控制器)-->③(請求HandlerMapping處理器映射器)查找Handler【根據xml、注解進行查找】-->④HandlerMapping向DispatcherServlet返回Handler--->⑤DispatcherServlet調用HandlerAdapter(處理器適配器)執行Handler--->⑥HandlerAdapter執行Handler-->
⑦Handler執行完成給HandlerAdapter返回ModelAndView-->HandlerAdapter向DispacherServlet返回ModelAndView【是SpringMVC框架的底層對象,包括Model和View】--->⑧DispacherServlet請求ResolverView(視圖解析器)進行視圖即系(解析成真正的視圖jsp)-->⑨視圖解析器向DispacherServlet返回View--->⑩DispacherServlet進行視圖渲染(將模型數據【ModelAndView對象中】)填充到request域中--->11. DispacherServlet向用戶響應(response)結果。
2.籠統的說:
處理流程規范化的首要內容就是考慮一個通用的Servlet響應程序大致應該包含的邏輯步驟:
步驟1—— 對Http請求進行初步處理,查找與之對應的Controller處理類(方法) ——HandlerMapping
步驟2—— 調用相應的Controller處理類(方法)完成業務邏輯 ——HandlerAdapter
步驟3—— 對Controller處理類(方法)調用時可能發生的異常進行處理 ——HandlerExceptionResolver
步驟4—— 根據Controller處理類(方法)的調用結果,進行Http響應處理
3.①屬於單列模式,基於方法的模式,粒度更細。【方法之間不共享變量,獨享request response數據--->處理結果通過ModelMap交回給框架】。
②SpringMVC集成了Ajax,使用起來更加方便。只需要一個@ResponseBody就可以實現。