JSP之項目路徑問題(${pageContext.request.contextPath},<%=request.getContextPath()%>以及絕對路徑獲取)


  本隨筆這是作為一個記錄使用,以備后查。項目完成之后本地部署OK,本地Linux部署OK,都可以正常的訪問,可是當我把它部署到服務器上面的時候,首頁可以正常訪問,可是當發出請求的時候卻報錯誤了,說找不到定義的請求。我很納悶,本地都OK為什么只有在服務器才能找不到請求。不過按照常理我還是一步一步的來開始排錯。

  第一步,查看項目部署成功,和部署路徑無關,OK。

  第二步,查看web.xml以及struts的請求配置,完全OK,沒有問題。

  第三步,既然部署沒有問題,請求配置都OK,如果不是機器的原因那么只有可能是發送請求的路徑有問題。

折騰了很久都沒有發現第三步中的問題出現在什么地方。因為在每個請求前我以為我都獲取了絕對路徑,所以和部署的路徑位置沒有關系。在請求的前面我加了獲取絕對路徑的EL表達式${pageContext.request.contextPath},我以為這個就可以獲取完整的路徑,其實不然。因為這個問題,很多時間浪費過去了。我把項目部署在本地直接通過項目名稱然后加上請求的方式直接訪問,發現是可以的,而當項目部署在服務器上面的時候卻不到找到請求的定義。最后我注意到我輸入的請求唯一的區別就是一個我都沒有加上端口號。

  第四步,會不會是因為端口號引起的問題。如果我本地的端口號改成了和瀏覽器的80端口號一樣,而服務器的端口號我沒有修改所以還是8080,而且${pageContext.request.contextPath} 沒有能力獲取端口號,那么是不是我就等於找到問題了。果然我通過在訪問服務器的請求加上了8080端口發現

訪問OK,沒有問題。這個時候我才意識到我將本地的端口號修改了而服務器的端口號沒有修改,而且${pageContext.request.contextPath}不能夠獲

取端口號,所以找不到請求。項目沒問題,部署沒問題,問題出現在${pageContext.request.contextPath}獲取值上。

  那么我就好奇${pageContext.request.contextPath}, <%=request.getContextPath()%><br/> 獲取到具體值到底是什么,他沒有獲取我想要的http://localName.com:port/項目名稱(上下文)嗎??通過實驗我發現,只是簡單做個測試,代碼不規范:

  

"request.getContextPath()的值是   "<%=request.getContextPath()%><br/>
"pageContext.request.contextPath的值是"${pageContext.request.contextPath}<br/>

  

通過運行我們發現了<%=request.getContextPath()%>和${pageContext.request.contextPath}獲取的結果都是項目名(上下文),而不是我們想要的那個結果,可是如果我們想要獲取項目的絕對路徑和端口號我們有什么辦法呢

  

<%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

通過運行結果可知<%=basePath%>可知結果是

  

 我們獲取了我們想要的結果又完整的路徑和端口號還有項目的上下文環境,所以大功告成了。我把項目中的${pageContext.request.contextPath}都替換成了<%=basePath%>,然后就完全的解決問題了。

 

第五步,做程序需要自己動手實踐而不應該只是想,還是代碼最實在靠譜,解決了一個問題,又漲了不少知識,加油。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM