1. 程式人生 > >關於${pageContext.request.contextPath }問題

關於${pageContext.request.contextPath }問題

  本隨筆這是作為一個記錄使用,以備後查。專案完成之後本地部署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/專案名稱(上下文)嗎??通過實驗我發現,只是簡單做個測試,程式碼不規範:

12"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%>,然後就完全的解決問題了。

相關推薦

no