今天在將本身代碼提交以後,有人提醒報了404錯誤javascript
我還傻傻的說我這裏不報錯啊,是否是你那裏出問題了java
瀏覽器報404,找到了這一個ajax請求jquery
而且在控制層也能找到對應的響應器,檢查了半天卻沒有發現錯誤,可是在同事那裏就是報404的錯誤web
後來發如今問題出新的緣由是由於url我使用的是相對路徑ajax
在idea中打開tomcat configuration瀏覽器
在這裏我發現個人Application context選擇的是默認值,也就是部署在了服務器的webapp的root路徑下,而同事那裏在這裏設置了值ContextName,那麼他的項目就部署在了webapp的ContextName路徑下面(有關application context的信息能夠點擊連接:idea配置application context(web項目的默認訪問路徑))tomcat
由於同事那裏給tomcat的添加了虛擬路徑,而我這裏沒有設置服務器
所以我就直接在服務器的根路徑下就能訪問到「count/subjectCount」,而且項目的訪問路徑以下圖app
可是個人同事給容器添加了虛擬路徑,ContextNamewebapp
這時咱們就要在訪問路徑前面提添加"ContextName」,即新的url是「ContextName/count/subjectCount」,而且此時的項目訪問路徑以下圖
這也就是問題出現的的緣由,有的人對容器添加了虛擬路徑,有的人沒有給容器添加虛擬路徑,直接放在toot裏面了
關於application context設置與不設置的區別
在這裏說明一下,${pageContext.request.contextPath}是JSP取得絕對路徑的方法,等價於<%=request.getContextPath()%> 。
也就是取出部署的應用程序名或者是當前的項目名稱
所以,咱們就應該設置訪問路徑的時候,使用絕對路徑進行訪問
var url='${pageContext.request.contextPath}'+'/count/subjectCount';
<% String path = request.getContextPath(); String basePath = request.getScheme()+'://'+request.getServerName()+':'+request.getServerPort()+path+'/'; %> *********** var url=path+'/count/subjectCount'; var url2=basePath+'/count/subjectCount'; ***********
在這裏basePath獲取了完整的路徑和端口號還有項目的上下文環境。 ,可解決由於修改服務器端口號引發的找不到路徑問題。