從剛開始接觸
Tomcat
開始,就被繁雜的相對路徑給弄暈了,儘管最後每次都能正確的匹配上,但是總覺得不是很順暢,一直試圖找出一條匹配的規則出來,但是每每總結出一條來的時候,總是又被新的“事實”給顛覆,讓人不勝煩惱,因此決定有一點寫一點。
通常相對路徑的寫法有兩種,一種就是以“
/
”開頭,一種就是不以“
/
”開頭,這兩種寫法有什麼區別呢,下面舉例闡述一下。
現在的
Web
環境是一個
Struts2
的應用,我的應用程式名是
Struts
,應用程式所在的目錄名也是
Struts
。這樣我的
url
基本是以
http://localhost/Struts
開頭的啦。現在做如下測試:
1
.在
Struts
目錄下面有一個檔案叫
sayHello.jsp
,它裡面的
form
的
action
的值是
HelloWorld.action
,那麼提交之後匹配的路徑是
http://localhost/Struts/HelloWorld.action
。
2
.如果
action
的值是
test/HelloWorld.action
,那麼提交之後匹配的路徑是
http://localhost/Struts/test/HelloWorld.action
。
3
.假設在
Struts
目錄下面有一個子目錄
add
,它裡面有一個檔案叫
sayHello.jsp
,它裡面的
form
的
action
的值是
HelloWorld.action
,那麼提交之後匹配的路徑是
http://localhost/Struts/add/HelloWorld.action
。
4
.在測試
3
下將
action
的值改為
test/HelloWorld.action
,那麼提交之後匹配的路徑是
http://localhost/Struts/add/test/HelloWorld.action
。
5
.在測試
3
下將
action
的值改為
/HelloWorld.action
,那麼提交之後匹配的路徑是
http://localhost/Struts/ HelloWorld.action
。
6
.在測試
3
下將
action
的值改為
/test/HelloWorld.action
,那麼提交之後匹配的路徑是
http://localhost/Struts/ test/HelloWorld.action
。
總結:在分頁檔中,所請求的相對路徑為
path
,那麼它的路徑匹配是從檔案當前所在的目錄開始的,假設分頁檔當前所在目錄為
curr
,那麼匹配後的完整路徑就是
http://localhost/Sturts/curr/path
;如果相對路徑為
/aa/bb/cc
,那麼匹配後的路徑就是
http://localhost/Sturts/path
。也就是說,
如果以“
/
”開頭,就從當前應用的根目錄開始匹配,如果不以“
/
”開頭就從當前檔案所在的目錄開始匹配
。這樣的話,如果檔案本來就在根目錄下面,那麼加“
/
”和不加“
/
”就沒啥區別了。
在
Struts2
還一個要匹配路徑的地方就是在處理完請求之後對頁面進行分發的時候,也就是
result
元素裡面的內容。測試記錄如下:
1
.
<result>/HelloWorld.jsp</result>
。匹配的路徑是
http://localhost/Struts/HelloWorld.jsp
。
2
.
<result>HelloWorld.jsp</result>
。這個時候就和調用這個
action
的路徑相關了。可以這樣進行匹配,首先得到請求這個
action
的
url
,然後去掉最後一個“
/
”後面的內容,再把
HelloWorld.jsp
接上去即可。例如,我們是通過
http://localhost/Struts/aa//bb/cc/HelloWorld.action
調用的
action
,那麼匹配出來的
url
就是
http://localhost/Struts/aa//bb/cc/HelloWorld.jsp
。