在web.xml文件中定義核心Filter攔截用戶請求。java
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
經過post或get提交請求。web
定義處理用戶請求的Action類。
在MVC框架中,控制器C其實是由攔截全部用戶請求,處理請求的通用代碼兩個部分共同組成的,實際的業務邏輯則由Action來處理。apache
MVC框架的底層機制:app
核心Servlet或Filter接收到用戶的請求後,一般會對用戶請求進行簡單處理,例如解析、封裝參數等,而後經過反射來建立Action實例,並經過調用Action的制定方法來處理用戶請求。框架
配置Action。jsp
配置處理結果和物理視圖的映射關係。post
編寫視圖資源。url
struts2的默認配置文件爲struts.xml,該文件應放在web應用的類加載路徑下,一般在WEB-INF/classes路徑下。struts.xml的最大做用是配置Action和請求之間的對應關係,並配置邏輯視圖名和物理視圖資源之間的相對關係,即返回結果和jsp文件的物理位置的關係。spa
struts2配置常量共有三種方式:code
經過struts.properites文件
經過struts.xml配置文件(推薦在此文件定義struts屬性)
經過Web應用的web.xml文件
一般struts2框架按如下搜索順序進行加載。
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
若是多個文件中配置了同一個struts常量,最後一個文件的配置會覆蓋前面文件的配置。
爲避免struts.xml的文件過大,可將配置文件分解成多個配置文件,而後在struts.xml文件中包含其餘配置文件。
<include file="struts-part1.xml"/>
爲了使開發的Action更規範,Struts2提供了一個Action接口,定義了Struts2的Action處理應該實現的規範。
public interface Action { //定義Action接口裏包含的一些結果字符串 public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public static final String NONE = "none"; public static final String SUCCESS = "success"; //定義處理用戶請求的execute()方法 public String execute() throws Exception; }
上面的Action接口裏只定義了一個execute()方法,該接口規範規定了Action類應該包含一個execute()方法,該方法返回一個字符串,此外,該接口還定義了5個字符串常量,他的做用是統一execute()方法的返回值。除此以外,struts2爲Action接口提供了一個實現類:ActionSuport。該類提供了許多默認方法,好比默認的用戶請求處理方法,數據校驗方法等,通常Action類繼承ActionSuport類。
struts2框架中的核心組件就是Action、攔截器等,struts2利用package和namespace來對多個Action和攔截器進行管理。
<!-- package提供了將多個Action組織爲一個模塊的方式 package的名字必須是惟一的 package能夠擴展 當一個package擴展自 另外一個package時該package會在自己配置的基礎上加入擴展的package 的配置 父package必須在子package前配置 name:package名稱 extends:繼承的父package名稱 abstract:設置package的屬性爲抽象的 抽象的package不能定義action 值true:false namespace:定義package命名空間 該命名空間影響到url的地址,例如此命名空間爲/test那麼訪問是的地址爲http://localhost:8080/struts2/test/XX.action --> <package name="com.kay.struts2" extends="struts-default" namespace="/test"> <interceptors> <!-- 定義攔截器 name:攔截器名稱 class:攔截器類路徑 --> <interceptor name="timer" class="com.kay.timer"></interceptor> <interceptor name="logger" class="com.kay.logger"></interceptor> <!-- 定義攔截器棧 --> <interceptor-stack name="mystack"> <interceptor-ref name="timer"></interceptor-ref> <interceptor-ref name="logger"></interceptor-ref> </interceptor-stack> <!-- 定義默認的攔截器 每一個Action都會自動引用 若是Action中引用了其它的攔截器 默認的攔截器將無效 --> <default-interceptor-ref name="mystack"></default-interceptor-ref> <!-- 全局results配置 --> <global-results> <result name="input">/error.jsp</result> </global-results> <!-- Action配置 一個Action能夠被屢次映射(只要action配置中的name不一樣) name:action名稱 class: 對應的類的路徑 method: 調用Action中的方法名 --> <action name="hello" class="com.kay.struts2.Action.LoginAction"> <!-- 引用攔截器 name:攔截器名稱或攔截器棧名稱 --> <interceptor-ref name="timer"></interceptor-ref> <!-- 節點配置 name : result名稱 和Action中返回的值相同 type : result類型 不寫則選用superpackage的type struts-default.xml中的默認爲dispatcher --> <result name="success" type="dispatcher">/talk.jsp</result> <!-- 參數設置 name:對應Action中的get/set方法 --> <param name="url">http://www.sina.com</param> </action> </interceptors> </package>