struts2中對於default-action-ref配置的解析思路

最近從新看了一下struts2,另外把裏面的一些原理以及相應的知識點複習了一遍,另外看了一下視頻教程。 web

今天在複習default-action-ref的時候遇到了一個問題,由於看了視頻教程,並且在網上查了一下相應的信息,對於package中default-action-ref的用法不少人有着不一樣的意見。有的人認爲這是一個bug。 瀏覽器

我來大體說一下我我的的理解,若是有說到不對的地方,請各位給予建議。 服務器


有一部份的朋友在某個自定義的action中定義default-action-ref這個配置的時候, jsp

認爲在地址欄中輸入地址如http://localhost:8080/project的時候(project爲項目名),若是該項目後面不輸入任 何名字,則會自動進入default-action-ref定義的action並進入對應的類方法中進行操做並根據result返回頁面,可是不少人發現 結果並非這樣,而無論怎樣都返回進入到index.jsp頁面。 spa


實際上這一點從原理上來說能夠理解,default-action-ref這個配置的意思是當用戶在點擊了沒有定義的action時,若是struts沒有找到用戶定義的action名稱,則會自動跳轉到該默認定義的action中。 code

我的以爲地址欄中項目後不寫名稱和名稱不存在是兩個概念, 視頻

好比用戶定義了一個strtus.xml: xml

<package name="a" extends="struts-default">  
          
          
        <default-action-ref name="dispatcher" />  
          
        <action name="dispatcher" class="com.UserAction" method="dispatcher"> <!-- dispatcher -->  
            <result type="dispatcher">  
                /hello.jsp  
               </result>   
        </action>  
      
        <action name="redirect" class="com.UserAction" method="redirect" > <!-- redirect -->  
            <result type="redirect">  
                /hello.jsp  
      
      
    </package>
若是此時地址欄輸入http://localhost:8080/project/aaa或經過連接進入該地址欄,配置文件中並無定義name爲aaa的action,該路徑會自動轉入default-action中。

可是若是用戶輸入http://localhost:8080/project,該請求會首先被項目中web.xml來進行接收,因爲 web.xml中默認指定的頁面是index.jsp,所以不管struts.xml中如何設置,服務器都會先跳轉至index.jsp。緣由其實很簡 單,由於在一個web project中,web.xml爲整個項目的入口。 教程

剛剛本人也試了將web.xml中welcome file定義刪除,默認也會進入index.jsp,所以該配置若是不寫的話,對於用戶來說該部分是透明的。 io

其實你們能夠作一個實驗,就能夠證實這塊的運行過程:

你們能夠把index.jsp修改成其餘名稱,好比aaa,bbb.jsp等。此時在服務器啓動並進行加載的時候,會根據web.xml去尋找所謂 的index.jsp,可是因爲index.jsp已被咱們修更名稱,那麼確定會找不到,並進入到strtus.xml中,這時咱們定義的default-action-ref就能夠起做用了,此時因爲沒有對應的主頁配置,瀏覽器會進入default的引用中進行操做,也就能夠實現直接進入action的操做了。

上述過程本人已經作過實驗,若是有朋友認爲描述或思路有問題,請提出意見,謝謝。
相關文章
相關標籤/搜索