首先講一下我遇到的問題:
在application.property中我們會配置項目名稱(如下)
server.servlet.context-path=/interfacemanager
我們會在js代碼里通過$.contextPath()引用我們設置的項目名稱;
所以每次我們請求后台的時候鏈接都是這樣的
$.contextPath()+/resource/querySomeThing;
即:
/interfacemanager /resource/querySomeThing
如果我們沒有設置server.servlet.context-path的值,那么:
$.contextPath() 就是空$.contextPath()+/resource/querySomeThing就會變成
/resource/querySomeThing;
還有!我們發現請求里面是沒有主機名和端口號的;這是因為ajax會在請求的時候自動為我們加上主機名和端口號,而他們處理的機制如下(沒有設置項目名的情況):
- url = “resource/querySomeThing”;//沒有斜杠
- url = “/resource/querySomeThing”;//一個斜杠
- url = “/ /querySomeThing”;//兩個斜杠
- 沒有斜杠的情況:以當前網頁(js可能與網頁不在一個目錄,但被加載在網頁中,就以當前網頁為准)所在的目錄為根節點去+url;
- 一個斜杠:請求服務器根目錄下的資源,ajax會自動為我們補全協議+ip+port類似 http://localhost:8080+url;
- 兩個斜杠:當出現”//”的時候,ajax就會只關心協議,而不去關心ip+port,所以我們的請求可能會變成這樣 http:// querySomeThing;
當我們設置了項目名稱的時候不管有幾個斜杠都是追加在項目名稱之后的,那么”//”其實在目錄中是不允許存在的。只是ajax把它當成一個“/“處理了。
如:
http://localhost:8080/interfacemanger//query;
會處理成
http://localhost:8080/interfacemanger/query;
我們來看一下 $.contextPath()的處理機制
其實pathName的值會隨着請求鏈接的url部分而變化,所以在我們每次使用 $.contextPath()的時候都會截取第二個”/”前的部分,當然這個截取是根據實際需求自己去改的。這里只是生命一下 $.contextPath() 的值是會動態改變的
