1、Struts1的運行原理前端
在啓動時經過前端總控制器ActionServlet加載struts-config.xml並進行解析,當用戶在jsp頁面發送請求被struts1的核心控制器ActionServlet接收,ActionServlet在用戶請求時將請求參數放到對應的ActionForm對象中的成員變量中,而後ActionServlet則會根據struts-config.xml中的映射關係找到相應的Action中的方法,將對應的ActionForm一併傳給這個Action中的方法裏,而後執行相應的業務邏輯操做,最後就根據ActionMapping的findforward方法返回一個ActionForward,以後在struts-config.xml中找到與之對應的forward標籤,根據它的配置路徑找到對應的jsp頁面。web
2、Struts2的運行原理spring
1、tomcat 啓動的時候會加載 web.xml 、核心控制器FilterDispatcher 會加載並解析 struts.xml
sql
2、客戶端會發送一個請求到 action 、FilterDispatcher 會根據後綴名進行攔截數據庫
3、FilterDispatcher根據 struts.xml 的配置文件信息 找到 某個action 對應的某個類裏的指定方法瀏覽器
4、執行相關的業務邏輯最後返回 一個Stringtomcat
5、<action/> 裏配置 <result/> name的屬性值與返回的String 進行匹配,跳轉到指定的jsp 頁面安全
3、Spring MVC運行原理session
整個處理過程從一個HTTP請求開始:mvc
1.Tomcat在啓動時加載解析web.xml,找到spring mvc的前端總控制器DispatcherServlet,而且經過DispatcherServlet來加載相關的配置文件信息。
2.DispatcherServlet接收到客戶端請求,找到對應HandlerMapping,根據映射規則,找到對應的處理器(Handler)。
3.調用相應處理器中的處理方法,處理該請求後,會返回一個ModelAndView。
4.DispatcherServlet根據獲得的ModelAndView中的視圖對象,找到一個合適的ViewResolver(視圖解析器),根據視圖解析器的配置,DispatcherServlet將要顯示的數據傳給對應的視圖,最後顯示給用戶。
4、Struts1.x與Struts2.x的區別
Struts 2以WebWork爲核心,
採用攔截器的機制來處理用戶的請求,struts1嚴重依賴於servletAPI,
屬於侵入性框架,struts2不嚴重依賴於servletAPI,屬於非侵入型框架。
線程模型方面:
Struts1的Action是單實例的,
一個Action的實例處理全部的請求。
Struts2的Action是一個請求對應一個實例(每次請求時都新new出一個對象),
沒有線程安全方面的問題
封裝請求參數:
Struts1中強制使用ActionForm對象封裝請求的參數。
Struts2能夠選擇使用POJO類來封裝請求的參數,或者直接使用Action的屬性。
struts1的前端總控制器(核心總控制器)爲ActionServlet,
struts2的前端總控制器(核心總控制器)爲FilterDispather
5、Spring MVC、struts1和struts2區別
1.spring mvc 單例 非線程安全
struts1單例 非線程安全
struts2線程安全對每一個請求都產生一個實例
2.spring mvc的入口是servlet,而struts2是filter
spring 的前端總控制器爲 DispatcherServlet
struts2 的前端總控制器爲 FilterDispatcher
struts1 的前端總控制器爲 actionServlet
3. 參數傳遞:struts是在接受參數的時候,
能夠用屬性來接受參數,這就說明參數是讓多個方法共享的。
springmvc 用方法來接受參數
4.spring mvc是基於方法的設計,而sturts是基於類
6、Struts2中result中的type類型
1.dispatcher:它是默認的,用來轉向頁面,一般處理JSP
2.redirect:將用戶重定向到一個已配置好的URL
3.redirectAction:將用戶重定向到一個已定義好的action
4.chain:將action和另一個action連接起來
5.freemarker:呈現Freemarker模板
6.httpheader:返回一個已配置好的HTTP頭信息響應
7.stream:向瀏覽器發送InputSream對象對下載的內容和圖片很是有用
8.velocity:呈現Velocity模板
9.xslt:該XML能夠經過XSL模板進行轉換
10.plaintext:顯示原始文件內容,例如文件源代碼
7、Struts2標籤
首先須要引用 <%@taglib prefix="s" uri="/struts-tags"%>
1.<s:if></s:if> 判斷標籤 後面可跟 <s:else>
2.<s:iterator> </s:iterator> 迭代標籤
3.<s:include></s:include> 引入標籤 能夠把一個JSP頁面或者servlet引入一個頁面中
4.<s:property></s:property> 輸出標籤
5.<s:set></s:set> 標籤賦予變量一個特定範圍內的值
6.<s:form></s:form> 表單標籤
7.<s:testarea></s:textarea> 文本域標籤
8.<s:select></s:select> 下拉標籤
9.<s:url></s:url> 聲明一個url的路徑
最經常使用的是:
判斷<s:if></s:if>
循環<s:iterator></s:terator>
輸出<s:property></s:property>
8、SSI整合
1、Action繼承於Actionsupport
2、引入struts-spring-plugin.jar包,從而完成struts和spring的整合
3、在struts2的action中注入service,保證service的名字和配置文件中的一致,並生成get,set方法
4、Dao層繼承於SqlMapClientDaoSupport
5、在dao層的配置文件中注入sqlMapClient
9、SSH整合
1、Action繼承於ActionSupport
2、引入struts-spring-plugin.jar包,從而完成struts和spring的整合
3、在struts2的action中注入service,保證service的名字和配置文件中的一致,並生成get,set方法
4、Dao層繼承於hibernateDaoSupport
5、在dao層的配置文件中注入sessionFactory
Hibernate中的兩大配置文件:
*.hbm.xml:主鍵生成策略,映射關係,一對多,一對一的關係
Hibernate.cfg.xml:方言(用哪一個數據庫),數據庫鏈接信息,包含*.hbm.xml內容,映射文件,也能夠配事務
10、Spring MVC整合
1.首先,要在web.xml裏面配置SpringMVC的核心控制器,DispatcherServlet,對指定的後綴請求進行攔截。
2.Controller層要加 @Controller註解,代表該類是MVC的控制層。
3.建立Service接口,給接口加上註解 @Component或者 @Service 代表這是Service業務處理層。
4.在Controller層聲明Service變量(屬性),給變量(屬性) 加上@Autowired註解,經過自動綁定機制將Service注入到Controller。(注:@Autowired默認是ByType,若是想根據屬性名注入,那麼就再加上註解@Resource(name="屬性名"))。
5.在Controller層的方法上加上註解@RequestMapping("requestAddress") 代表該方法的請求地址。
6.Dao層要加上註解 @Repository 代表這是數據庫持久層。
7.一樣將dao實例注入到service層中。
8.配置視圖解析器 "InternalResourceViewResolver",對處理後的跳轉進行統一配置。