在上一篇文章中也提到了,struts2不需要依賴Servelet API,也不用像struts1一樣需要繼承HttpServlet,因此耦合度低,這也是我們在平時項目中之所以使用框架的原因。
今天要講的action的流程:
1,流程
1)攔截器攔截請求,創建代理Action對象,執行方法,返回結果,界面跳轉。
2)攔截器解析請求路徑,獲取Action的名稱,到配置文件中查找action的完整類名,利用反射創建對象。
2、方法特點
public類型,無入參,返回值類型String 。
3、Action類和ActionProxy,ActionInvocation類的關係
ActionProxy是Action的代理類,通過解析配置文件獲取Action類中名稱和完整路徑,利用反射機制創建的。
ActionInvocation是Action類的調用者,反射創建的ActionProxy類就存在ActionInvocaiton類中。
4、流程解析
1)http://127.0.0.1:8080/SSHDemo/list.action 客戶端發出請求,struts2的過濾器攔截請求。並且創建action代理,然後根據配置文件mapper去匹配到對應的空間對應的action類中。
2)struts2配置文件對應的空間中該action映射的action類。action中沒有指定執行方法默認爲execute方法。
<action name="list" class="listAction">
<result name="success" >/WEB-INF/jsp/list.jsp</result>
</action>
3) action類中默認的執行方法,返回String類型的結果字符串。
public String execute() {
Map request = (Map) ActionContext.getContext().get("request");
request.put("list",service.selectList());
return "success";
}