本文是在學習了基礎的javaWeb後對Struts的基礎總結。java
目的一是,在於之後本身能更加方便的去回顧這些理論知識,另外也但願可以幫助知識水平和我差很少的人。spring
錯誤的地方,但願你們能指出來。apache
1.Struts是一個實現MVC設計模式的優秀的框架。Struts定義了通用的控制器,經過配置文件和視圖,以Action的概念封裝用戶請求,讓代碼更加清晰易讀。設計模式
2.Struts2以WebWork優秀的設計思想爲核心,吸取了Struts框架的部分優勢,提供了一個使用更加整潔的MVC設計模式實現的Web應用程序框架。瀏覽器
Struts2和Struts1的體系差異很是大,由於Struts2使用了WebWork的設計核心。Struts2頻繁使用攔截器處理用戶請求,容許用戶的業務邏輯控制器與Servlet API完全分離。Struts2的體系結構主要包括Struts2的控制器組件,Struts2配置文件和Struts2標籤庫,3個部分。session
Struts2的控制器組件app
Struts2的控制器組件是Struts2框架的核心,事實上全部MVC框架均以控制器組件爲核心。框架
Struts2的控制器有一下的兩個部分組成ssh
(1)核心控制器:StrutsPrepareAndExecuteFilterjsp
StrutsPrepareAndExecuteFilter是Struts2的核心控制器,該控制器做爲一個filter運行於Web應用程序中,負責攔截全部的用戶請求,當用戶請求到達時,該filter會過濾用戶請求。若是請求以*.action結尾,則該請求將被轉入Struts2框架處理。Struts將根據*去查找對應的action。
(2)業務控制器:業務控制器action由用戶實現,並在配置文件中進行配置。
a) 徹底的POJO類
b) 無需與任何ServletAPI耦合
c) 既可使用execute()做爲默認的處理方法,也可使用另一個public String name方法動態調用
配置文件
當Struts2建立系統的action代理時,須要使用Struts2的配置文件,Struts2的配置文件分爲如下兩種:
(1)配置action的Struts.xml文件。
(2)配置Struts2全局屬性的struts.properties文件(可選)
<struts>
<!-- Struts2的Action均需配置於package中-->
<!--Struts的常量配置-->
<constant name=」struts.action.extension」 value=」do」>
<!--將Action的默認訪問擴展名*.Action改成*.do-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<constant name="struts.objectFactory" value="spring"></constant>
<package name="struts2" namespace="/" extends="struts-default">
<!--定義一個login的Action類,實現類爲LoginAction-->
<action name="login" class="LoginAction">
<!--定義結果於視圖的映射關係-->
<result name="success">/index.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
Struts2的標籤庫
導入庫:<%@taglib url=」/struts-tags」 prefix=」s」 %>
架包
如下是我在ssh整合時Struts2的必備包
(1)瀏覽器發送請求,如請求/login.action
(2)核心控制器strutsPreprareAndExecuteFilter根據請求決定調用合適的Action
(3)WebWork的攔截器鏈自動對請求應用通用功能,如workflow、validation或文件上傳等功能。
(4)回調Action的execute()方法,該方法先獲取用戶請求參數,而後調用業務邏輯組件來處理用戶請求
Action的execute()方法處理結果信息將被輸出到瀏覽器中,能夠是HTML頁面、圖像、也能夠是P DF文檔或是其餘文檔。支持的視圖技術很是多,即支持JSP、也支持Velocity、FreeMarker等模版技術。
傳統的Web開發中,常常會用到servlet API中的HttpServletRequest、HttpSession和ServletContent3個對象。
Struts提供了兩種方式:解耦的訪問方式與耦合的訪問方式(是否使用到底層的http類)
解耦的訪問方式
Struts2對3個對象進行了封裝,構造了三個Map對象用於代替這三種對象。咱們能夠直接使用對應的Map對象保存和讀取數據。
獲取HttpServletRequest對象(訪問request對象)
ActionContext context=ActionContext.getContext()
Map request=(Map) context.get(「request」);
獲取HttpSession對象(訪問session)
ActionContext context=ActionContext.getContext()
Map session=(Map)context.getSession;
獲取ServletContext(訪問application)
ActionContext context=ActionContext.getContext()
Map application=(Map)context.getApplication
利用請求對象傳遞數據,即直接使用ActionContext的put()方法將數據保存至ActionContext中,如ActionContext.getContext.put(),至關於request.setAttribute,緣由在於Struts2中的org.apache.struts2.dispatcher.StrutsRequestWrapper類,該類是HttpServletRequest的包裝類,其重寫了getAttribute方法。
耦合的方式
獲取HttpServletRequest 對象
HttpServletRequest request=ServletActionContext.getRequest();
HttpServletRequest request=A
獲取HttpSession對象
HttpSession session=ServletActionContext.getRequset().getSession();
獲取HttpServletResponse對象
HttpServletResponse response=ServletActionContext.getResponse();
獲取ServletContext對象
ServletContext Context=ServletActionContext.getServletContext();
還能夠如下方法得到HttpServletRequest對象和ServletContext對象
獲取HttpServletRequest對象
ActionContext.getContext.get(ServletActionContext.HTTP_REQUEST);
//或者ServletActionContext.HTTP_CONTEXT來獲得application