Jsp路徑問(wèn)題
一. 問(wèn)題
JSP 中究竟采用絕對(duì)路徑還是采用相對(duì)路徑隨著所采用技術(shù)的越來(lái)越復(fù)雜,這個(gè)問(wèn)題也變得越來(lái)越難以解決。
1) 采用相對(duì)路徑遇到的問(wèn)題
l 相對(duì)路徑固然比較靈活,但如果想復(fù)制頁(yè)面內(nèi)的代碼卻變得比較困難,因?yàn)椴煌捻?yè)面具有不同的相對(duì)路徑,復(fù)制后必須修改每一個(gè)連接的路徑。
l 如果頁(yè)面被多于一個(gè)的頁(yè)面所包含,那么被包含頁(yè)面中的相對(duì)路徑將是不正確的。
l 如果采用 Struts 的 Action 返回頁(yè)面,那么由于頁(yè)面路徑與 Action 路徑不同,使得瀏覽器無(wú)法正確解釋頁(yè)面中的路徑,如頁(yè)面為 /pages/cust/cust.jsp ,圖片所有目錄為 /images/title.gif ,這時(shí)在 /pages/cust/cust.jsp 中的所用的路徑為 ”../../images/title.gif” ,但是如果某一個(gè) Action 的 Forward 指向這個(gè) JSP 文件,而這個(gè) Action 的路徑為 /cust/manage.do ,那么頁(yè)面內(nèi)容中 ”../../images/title.gif” 就不再指向正確的路徑了。
解決以上問(wèn)題似乎只有使用絕對(duì)路徑了。
2) 采用絕對(duì)路徑遇到的問(wèn)題
l 隨著不同的 Web 應(yīng)用發(fā)布方式,絕對(duì)路徑的值也不同。如 Web 應(yīng)用發(fā)布為 MyApp ,則路徑 ”/MyApp/images/title.gif” 是正確的,但發(fā)布為另一應(yīng)用時(shí)如 MyApp2 ,這個(gè)路徑就不對(duì)了,也許這個(gè)情況比較少,但以 default 方式發(fā)布 Web 應(yīng)用時(shí)以上絕對(duì)路徑也不同: ”/images/title.gif” 。
二. 解決方案
1) 采用絕對(duì)路徑,但為了解決不同部署方式的差別,在所有非 struts 標(biāo)簽的路徑前加 ${pageContext.request.contextPath} ,如原路徑為:
”/images/title.gif” ,改為
“${pageContext.request.contextPath}/images/title.gif” 。
代碼 ” ${pageContext.request.contextPath}” 的作用是取出部署的應(yīng)用程序名,這樣不管如何部署,所用路徑都是正確的。
缺點(diǎn):
操作不便,其他工具無(wú)法正確解釋 ${pageContext.request.contextPath}
2) 采用相對(duì)路徑,在每個(gè) JSP 文件中加入 base 標(biāo)簽,如:
<base href="http://${header['host']}${pageContext.request.contextPath}/pages/cust/relation.jsp" />
這樣所有的路徑都可以使用相對(duì)路徑。
缺點(diǎn):
對(duì)于被包含的文件依然無(wú)效。
真正使用時(shí)需要靈活應(yīng)用1)和2),寫(xiě)出更加健壯的代碼。
posted on 2009-10-13 15:18 mingruofei 閱讀(318) 評(píng)論(0) 編輯 收藏