Java中項目的路徑不要寫相對路徑,儘可能用絕對路徑

  • 問題

今天在將本身代碼提交以後,有人提醒報了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()%> 。

也就是取出部署的應用程序名或者是當前的項目名稱

所以,咱們就應該設置訪問路徑的時候,使用絕對路徑進行訪問

  • 使用jquery
var url='${pageContext.request.contextPath}'+'/count/subjectCount';
  • 使用jsp的原始方法
<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+'://'+request.getServerName()+':'+request.getServerPort()+path+'/';
%>
***********
var url=path+'/count/subjectCount';

var url2=basePath+'/count/subjectCount';
***********

在這裏basePath獲取了完整的路徑和端口號還有項目的上下文環境。 ,可解決由於修改服務器端口號引發的找不到路徑問題。

相關文章
相關標籤/搜索