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