Struts基礎總結

 

本文是在學習了基礎的javaWeb後對Struts的基礎總結。java

目的一是,在於之後本身能更加方便的去回顧這些理論知識,另外也但願可以幫助知識水平和我差很少的人。spring

錯誤的地方,但願你們能指出來。apache

 

            Struts基礎總結

1.Struts是一個實現MVC設計模式的優秀的框架。Struts定義了通用的控制器,經過配置文件和視圖,以Action的概念封裝用戶請求,讓代碼更加清晰易讀。設計模式

2.Struts2WebWork優秀的設計思想爲核心,吸取了Struts框架的部分優勢,提供了一個使用更加整潔的MVC設計模式實現的Web應用程序框架。瀏覽器

 

體系結構

Struts2Struts1的體系差異很是大,由於Struts2使用了WebWork的設計核心。Struts2頻繁使用攔截器處理用戶請求,容許用戶的業務邏輯控制器與Servlet API完全分離。Struts2的體系結構主要包括Struts2的控制器組件,Struts2配置文件和Struts2標籤庫,3個部分。session

 

Struts2的控制器組件app

Struts2的控制器組件是Struts2框架的核心,事實上全部MVC框架均以控制器組件爲核心。框架

Struts2的控制器有一下的兩個部分組成ssh

(1)核心控制器:StrutsPrepareAndExecuteFilterjsp

StrutsPrepareAndExecuteFilterStruts2的核心控制器,該控制器做爲一個filter運行於Web應用程序中,負責攔截全部的用戶請求,當用戶請求到達時,該filter會過濾用戶請求。若是請求以*.action結尾,則該請求將被轉入Struts2框架處理。Struts將根據*去查找對應的action

(2)業務控制器:業務控制器action由用戶實現,並在配置文件中進行配置。

a) 徹底的POJO

b) 無需與任何ServletAPI耦合

c) 既可使用execute()做爲默認的處理方法,也可使用另一個public String name方法動態調用

 

配置文件

Struts2建立系統的action代理時,須要使用Struts2的配置文件,Struts2的配置文件分爲如下兩種:

(1)配置actionStruts.xml文件。

(2)配置Struts2全局屬性的struts.properties文件(可選)

<struts>

<!-- Struts2Action均需配置於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">

<!--定義一個loginAction類,實現類爲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的必備包

 

 

Struts2的運行流程

(1)瀏覽器發送請求,如請求/login.action

(2)核心控制器strutsPreprareAndExecuteFilter根據請求決定調用合適的Action

(3)WebWork的攔截器鏈自動對請求應用通用功能,如workflowvalidation或文件上傳等功能。

(4)回調Actionexecute()方法,該方法先獲取用戶請求參數,而後調用業務邏輯組件來處理用戶請求

Actionexecute()方法處理結果信息將被輸出到瀏覽器中,能夠是HTML頁面、圖像、也能夠是P DF文檔或是其餘文檔。支持的視圖技術很是多,即支持JSP、也支持VelocityFreeMarker等模版技術。

 

 

 

 

 

使用Action來訪問servlet API

傳統的Web開發中,常常會用到servlet API中的HttpServletRequestHttpSessionServletContent3個對象。

Struts提供了兩種方式:解耦的訪問方式與耦合的訪問方式(是否使用到底層的http)

 

解耦的訪問方式

 

Struts23個對象進行了封裝,構造了三個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

 

利用請求對象傳遞數據,即直接使用ActionContextput()方法將數據保存至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

相關文章
相關標籤/搜索