<action name="auth" >的執(zhí)行流程是怎樣的?
<action name="auth" >
<result>/WEB-INF/page/manager.jsp</result>
<result name="login">/login.jsp</result>
<!-- 引用自定義攔截器棧 -->
<interceptor-ref name="myStack"></interceptor-ref>
</action>
有沒有哪位大神解釋一下,上面這段代碼的執(zhí)行流程。。。
2017-07-24
我自己是這樣理解的,因為auth沒有指定對應(yīng)的action,所以系統(tǒng)會自動生成一個默認(rèn)的action,該action默認(rèn)返回SUCCESS。在視頻中,老師第一次通過auth可以直接訪問/WEB-INF/page/manager.jsp,就是因為那個默認(rèn)的action返回了一個SUCCESS,而且,那時候并沒有加入我們自定義的攔截器,所以可以直接訪問WEB-INF下的文件。后來,我們自定義了的攔截器和攔截器棧,在自定義攔截器中添加了相關(guān)的處理代碼,并在auth的action中引用了myStack,這時候auth執(zhí)行的流程發(fā)生了變化。當(dāng)用戶直接在URL中輸入auth后,這時候它會經(jīng)過多個攔截器,自然也會被我們自定義的攔截器攔截到,接著執(zhí)行攔截器中的處理代碼,判斷用戶是否成功登陸過,如果沒有成功登陸過,則返回登陸頁面;如果已成功登陸過,則通過invoke()方法調(diào)用默認(rèn)的action,因為默認(rèn)的action默認(rèn)返回SUCCESS,然后跳轉(zhuǎn)到/WEB-INF/page/manager.jsp頁面。整個執(zhí)行的流程應(yīng)該就是這樣子的。。。
2017-07-23
首先, 你得關(guān)注還有一個name="login"的action 它能夠獲取到session, 然后在auth中它會先執(zhí)行攔截器myStack,獲取到session 判斷是否存在 ,存在的話就就調(diào)用invoke方法 將“success”字符串返回給result 否則就返回一個“l(fā)ogin字符串 ”(因為此action為默認(rèn)action 在調(diào)用invoke時不會執(zhí)行action)?然后再調(diào)用一次攔截器 ,最后返回字符串給result 我的理解 流程就這樣。