一、什麼是Spring?
1、Spring的核心是一個輕量級(Lightweight)的容器(Container)。
2、Spring是實現IoC(Inversion of Control)容器和非***性(No intrusive)的框架。
3、Spring提供AOP(Aspect-oriented programming)概念的實現方式。
4、Spring提供對持久層(Persistence)、事物(Transcation)的支持。
5、Spring供MVC Web框架的實現,並對一些常用的企業服務API(Application Interface)提供一致的模型封裝。
6、Spring提供了對現存的各種框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。
總之,Spring是一個全方位的應用程序框架。
二、什麼是框架?爲什麼要學框架 ?
框架 是 實現部分功能的代碼 (半成品),使用框架簡化企業級軟件開發
學習框架 ,清楚的知道框架能做什麼? 還有哪些工作需要自己編碼實現 ?
三、什麼是Struts2 ?
Struts2 是一款優秀MVC框架
MVC:是一種思想,是一種模式,將軟件分爲 Model模型、View視圖、Controller控制器
MVC由來是web開發
JavaEE軟件三層結構 : web層(表現層)、業務邏輯層、數據持久層 (sun提供JavaEE開發規範)
JavaEE開發更強調三層結構, web層開發注重MVC
struts2 就是 web層開發框架,符合MVC模式
struts1 、webwork 、jsf 、SpringMVC 都是MVC
四、Struts2 和 Struts1 關係
沒有關係, Struts2 全新框架,引入WebWork很多技術和思想,Struts2 保留Struts1 類似開發流程,Struts2 內核 webwork
五、什麼是ibernate?
Hibernate是一種強大高效的持久層查詢框架。它對JDBC進行了輕量級封裝,以面向事物的思維解決了數據庫操縱問題。同時,是一種非強迫性的解決方案,能與一些數據庫和Java服務器平穩的集成。
六、什麼是SpringMvc?
是基於Spring的MVC框架。
七、SpringMvc整個的執行流程:
前端控制器DispatcherServlet
處理器映射器HandlerMapping
處理器適配器HandlerAdapter
1、發起請求到前端控制器(DispatcherServlet )
2、DispatcherServlet 請求 HandlerMapping查找Handler(可以根據xml、註解進行查找)
3、HandlerMapping 向前 DispatcherServlet返回Handler
4、DispatcherServlet 調用 HandlerAdapter 執行Handler
5、HandlerAdapter 執行 Handler
6、Handler執行完給處理器適配器返回ModelAndView
7、處理器適配器向前端控制器返回ModelAndView (ModelAndView 是SpringMvc的底層對象 包括model和view)
8、前端控制器請求視圖解析器去解析視圖,根據邏輯視圖名解析成真正的視圖(jsp)
9、視圖解析器向前端控制器返回view
10、前端控制器進行視圖渲染
八、SpringMvc 和Struts2區別
1、Struts2是類級別的攔截, 一個類對應一個request上下文,SpringMVC是方法級別的攔截,一個方法對應一個request上下文,而方法同時又跟一個url對應,所以說從架構本身上SpringMVC就容易實現restful url,而struts2的架構實現起來要費勁,因爲Struts2中Action的一個方法可以對應一個url,而其類屬性卻被所有方法共享,這也就無法用註解或其他方式標識其所屬方法了。
2、由上邊原因,SpringMVC的方法之間基本上獨立的,獨享request response數據,請求數據通過參數獲取,處理結果通過ModelMap交回給框架,方法之間不共享變量,而Struts2搞的就比較亂,雖然方法之間也是獨立的,但其所有Action變量是共享的,這不會影響程序運行,卻給我們編碼 讀程序時帶來麻煩,每次來了請求就創建一個Action,一個Action對象對應一個request上下文。
3、由於Struts2需要針對每個request進行封裝,把request,session等servlet生命週期的變量封裝成一個一個Map,供給每個Action使用,並保證線程安全,所以在原則上,是比較耗費內存的。
4、 攔截器實現機制上,Struts2有以自己的interceptor機制,SpringMVC用的是獨立的AOP方式,這樣導致Struts2的配置文件量還是比SpringMVC大。
5、SpringMVC的入口是servlet,而Struts2是filter(這裏要指出,filter和servlet是不同的。以前認爲filter是servlet的一種特殊),這就導致了二者的機制不同,這裏就牽涉到servlet和filter的區別了。
6、SpringMVC集成了Ajax,使用非常方便,只需一個註解@ResponseBody就可以實現,然後直接返回響應文本即可,而Struts2攔截器集成了Ajax,在Action中處理時一般必須安裝插件或者自己寫代碼集成進去,使用起來也相對不方便。
7、SpringMVC驗證支持JSR303,處理起來相對更加靈活方便,而Struts2驗證比較繁瑣,感覺太煩亂。
8、spring MVC和Spring是無縫的。從這個項目的管理和安全上也比Struts2高(當然Struts2也可以通過不同的目錄結構和相關配置做到SpringMVC一樣的效果,但是需要xml配置的地方不少)。
9、 設計思想上,Struts2更加符合OOP的編程思想, SpringMVC就比較謹慎,在servlet上擴展。
10、SpringMVC開發效率和性能高於Struts2。
11、SpringMVC可以認爲已經100%零配置。
九、filter和servlet的比較?
概念:
1、servlet:servlet是一種運行服務器端的java應用程序,具有獨立於平臺和協議的特性,並且可以動態的生成web頁面,它工作在客戶端請求與服務器響應的中間層。
2、filter:filter是一個可以複用的代碼片段,可以用來轉換HTTP請求、響應和頭信息。Filter不像Servlet,它不能產生一個請求或者響應,它只是修改對某一資源的請求,或者修改從某一的響應。
生命週期:
1、servlet:servlet的生命週期始於它被裝入web服務器的內存時,並在web服務器終止或重新裝入servlet時結束。servlet一旦被裝入web服務器,一般不會從web服務器內存中刪除,直至web服務器關閉或重新結束。
(1)、裝入:啓動服務器時加載Servlet的實例;
(2)、初始化:web服務器啓動時或web服務器接收到請求時,或者兩者之間的某個時刻啓動。初始化工作有init()方法負責執行完成;
(3)、調用:從第一次到以後的多次訪問,都是隻調用doGet()或doPost()方法;
(4)、銷燬:停止服務器時調用destroy()方法,銷燬實例。
2、filter:(一定要實現javax.servlet包的Filter接口的三個方法init()、doFilter()、destroy(),空實現也行)
(1)、啓動服務器時加載過濾器的實例,並調用init()方法來初始化實例;
(2)、每一次請求時都只調用方法doFilter()進行處理;
(3)、停止服務器時調用destroy()方法,銷燬實例。
職責
1、servlet:
創建並返回一個包含基於客戶請求性質的動態內容的完整的html頁面;
創建可嵌入到現有的html頁面中的一部分html頁面(html片段);
讀取客戶端發來的隱藏數據;
讀取客戶端發來的顯示數據;
與其他服務器資源(包括數據庫和java的應用程序)進行通信;
通過狀態代碼和響應頭向客戶端發送隱藏數據。
2、filter:
filter能夠在一個請求到達servlet之前預處理用戶請求,也可以在離開servlet時處理http響應:
在執行servlet之前,首先執行filter程序,併爲之做一些預處理工作;
根據程序需要修改請求和響應;
在servlet被調用之後截獲servlet的執行
區別:
1、servlet 流程是短的,url傳來之後,就對其進行處理,之後返回或轉向到某一自己指定的頁面。它主要用來在 業務處理之前進行控制。
2、filter 流程是線性的,url傳來之後,檢查之後,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等,而servlet 處理之後,不會繼續向下傳遞。filter功能可用來保持流程繼續按照原來的方式進行下去,或者主導流程,而servlet的功能主要用來主導流程。
3、filter可用來進行字符編碼的過濾,檢測用戶是否登陸的過濾,禁止頁面緩存等