JSP的相對(duì)路徑如何計(jì)算深入研究
更新時(shí)間:2013年10月05日 14:59:15 作者:
要在jsp中使用圖片,如何計(jì)算相對(duì)路徑?經(jīng)過(guò)Servlet,struts轉(zhuǎn)發(fā)后又如何計(jì)算相對(duì)路徑,下面我們帶著疑問(wèn)看看本文
問(wèn)題描述:
要在/jsp/index.jsp文件使用圖片,如何計(jì)算相對(duì)路徑? 經(jīng)過(guò)Servlet,struts轉(zhuǎn)發(fā)后又如何計(jì)算相對(duì)路徑?
目錄結(jié)構(gòu):
應(yīng)用名字:Demo
demo
----webroot
----images
----go.gif
----jsp
----index.jsp
----css
------------------------------------------------------------------------------
第一種情況:直接訪問(wèn)JSP文件
URL是 http://localhost/Context path/jsp/index.jsp
要在index.jsp引用go.gif文件:
1、使用決對(duì)路徑
<img src='<%=request.getContextPath() %>/images/go.gif'/>
瀏覽器尋找方式: 域名+/Context path/images/go.gif ,可找到。
2、使用相對(duì)路徑
<img src='../images/go.gif'/>
瀏覽器尋找方式:通過(guò)地址欄分析,index.jsp所在目錄(jsp)的上一層目錄(WebRoot)下的images/go.gif文件 。
3、使用base href
寫(xiě)<%=request.getContextPath() %>太麻煩,可以在每一個(gè)jsp文件頂部加入以下代碼
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <base href="<%=basePath%>">
<img src='images/go.gif'/>
瀏覽器尋找方式: basePath的值http://localhost/Context path/再加上images/go.gif,可找到。
------------------------------------------------------------------------------
第二種情況:servlet轉(zhuǎn)發(fā)到j(luò)sp
1、使用相對(duì)路徑
URL是http://localhost/Context path/servlet_2 (轉(zhuǎn)發(fā)到/jsp/index.jsp)
錯(cuò)誤:
根據(jù)/jsp/index.jsp路徑計(jì)算,得到 <img src='../images/go.gif'/>
正確:
<img src='images/go.gif'/>
原因:
index.jsp是保存在服務(wù)器端的/jsp/index.jsp目錄下面,但通過(guò)轉(zhuǎn)發(fā)后瀏覽器并不知道/jsp/目錄的存在,因?yàn)榈刂窓谥袥](méi)有體現(xiàn)出來(lái)。所以服務(wù)器端/jsp/目錄并不會(huì)對(duì)相對(duì)路徑產(chǎn)生影響
瀏覽器尋找方式:通過(guò)地址欄分析http://localhost/Context path/servlet_2 ,相對(duì)于servlet_2所在目錄(/)下面找到images/go.gif文件
2、使用相對(duì)路徑
URL是http://localhost/Context path/servlet/ser/ser/servlet_1 (轉(zhuǎn)發(fā)到/jsp/index.jsp)
“/servlet/ser/ser/servlet_1 是在web.xml文件配置的
錯(cuò)誤:
根據(jù)/jsp/index.jsp路徑計(jì)算,得到 <img src='../images/go.gif'/>
正確:
<img src='../../../images/go.gif'/>
原因:
index.jsp是保存在服務(wù)器端的/jsp/index.jsp目錄下面,但通過(guò)轉(zhuǎn)發(fā)后瀏覽器并不知道/jsp/目錄的存在,因?yàn)榈刂窓谥袥](méi)有體現(xiàn)出來(lái)。所以服務(wù)器端/jsp/目錄并不會(huì)對(duì)相對(duì)路徑產(chǎn)生影響
瀏覽器尋找方式:通過(guò)地址欄分析http://localhost/Context path/servlet/ser/ser/servlet_1,相對(duì)于servlet_1所在目錄(ser)的上一層目錄的上一層目錄的上一層目錄(/)下的images/go.gif文件
3、使用決對(duì)路徑
<img src='<%=request.getContextPath() %>/images/go.gif'/>
------------------------------------------------------------------------------
總結(jié):相對(duì)路徑是由瀏覽器通過(guò)地址欄分析出來(lái)的,與服務(wù)器端文件的存放路徑?jīng)]有關(guān)系,由其是使用Servlet,struts轉(zhuǎn)發(fā)到某jsp文件后,某jsp在服務(wù)器端存放的位置是/a/b/c/d/f/g.jsp , 但經(jīng)過(guò)Servlet,struts轉(zhuǎn)發(fā)后,瀏覽器的地址欄可不一定是/a/b/c/d/f/這樣的層次。所以相對(duì)路徑的計(jì)算以瀏覽器地址欄為準(zhǔn)。
struts2中可以使用命名空間,來(lái)保證瀏覽器地址欄中的目錄層次與服務(wù)器端目錄層次的一致性,這樣程序員通過(guò)服務(wù)器端的目錄層次計(jì)算相對(duì)路徑,在瀏覽器中也是正常的。
但我們理解了原理,就算不使用命名空間,自己也有強(qiáng)大的控制力。
要在/jsp/index.jsp文件使用圖片,如何計(jì)算相對(duì)路徑? 經(jīng)過(guò)Servlet,struts轉(zhuǎn)發(fā)后又如何計(jì)算相對(duì)路徑?
目錄結(jié)構(gòu):
應(yīng)用名字:Demo
demo
----webroot
----images
----go.gif
----jsp
----index.jsp
----css
------------------------------------------------------------------------------
第一種情況:直接訪問(wèn)JSP文件
URL是 http://localhost/Context path/jsp/index.jsp
要在index.jsp引用go.gif文件:
1、使用決對(duì)路徑
<img src='<%=request.getContextPath() %>/images/go.gif'/>
瀏覽器尋找方式: 域名+/Context path/images/go.gif ,可找到。
2、使用相對(duì)路徑
<img src='../images/go.gif'/>
瀏覽器尋找方式:通過(guò)地址欄分析,index.jsp所在目錄(jsp)的上一層目錄(WebRoot)下的images/go.gif文件 。
3、使用base href
寫(xiě)<%=request.getContextPath() %>太麻煩,可以在每一個(gè)jsp文件頂部加入以下代碼
<% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <base href="<%=basePath%>">
<img src='images/go.gif'/>
瀏覽器尋找方式: basePath的值http://localhost/Context path/再加上images/go.gif,可找到。
------------------------------------------------------------------------------
第二種情況:servlet轉(zhuǎn)發(fā)到j(luò)sp
1、使用相對(duì)路徑
URL是http://localhost/Context path/servlet_2 (轉(zhuǎn)發(fā)到/jsp/index.jsp)
錯(cuò)誤:
根據(jù)/jsp/index.jsp路徑計(jì)算,得到 <img src='../images/go.gif'/>
正確:
<img src='images/go.gif'/>
原因:
index.jsp是保存在服務(wù)器端的/jsp/index.jsp目錄下面,但通過(guò)轉(zhuǎn)發(fā)后瀏覽器并不知道/jsp/目錄的存在,因?yàn)榈刂窓谥袥](méi)有體現(xiàn)出來(lái)。所以服務(wù)器端/jsp/目錄并不會(huì)對(duì)相對(duì)路徑產(chǎn)生影響
瀏覽器尋找方式:通過(guò)地址欄分析http://localhost/Context path/servlet_2 ,相對(duì)于servlet_2所在目錄(/)下面找到images/go.gif文件
2、使用相對(duì)路徑
URL是http://localhost/Context path/servlet/ser/ser/servlet_1 (轉(zhuǎn)發(fā)到/jsp/index.jsp)
“/servlet/ser/ser/servlet_1 是在web.xml文件配置的
錯(cuò)誤:
根據(jù)/jsp/index.jsp路徑計(jì)算,得到 <img src='../images/go.gif'/>
正確:
<img src='../../../images/go.gif'/>
原因:
index.jsp是保存在服務(wù)器端的/jsp/index.jsp目錄下面,但通過(guò)轉(zhuǎn)發(fā)后瀏覽器并不知道/jsp/目錄的存在,因?yàn)榈刂窓谥袥](méi)有體現(xiàn)出來(lái)。所以服務(wù)器端/jsp/目錄并不會(huì)對(duì)相對(duì)路徑產(chǎn)生影響
瀏覽器尋找方式:通過(guò)地址欄分析http://localhost/Context path/servlet/ser/ser/servlet_1,相對(duì)于servlet_1所在目錄(ser)的上一層目錄的上一層目錄的上一層目錄(/)下的images/go.gif文件
3、使用決對(duì)路徑
<img src='<%=request.getContextPath() %>/images/go.gif'/>
------------------------------------------------------------------------------
總結(jié):相對(duì)路徑是由瀏覽器通過(guò)地址欄分析出來(lái)的,與服務(wù)器端文件的存放路徑?jīng)]有關(guān)系,由其是使用Servlet,struts轉(zhuǎn)發(fā)到某jsp文件后,某jsp在服務(wù)器端存放的位置是/a/b/c/d/f/g.jsp , 但經(jīng)過(guò)Servlet,struts轉(zhuǎn)發(fā)后,瀏覽器的地址欄可不一定是/a/b/c/d/f/這樣的層次。所以相對(duì)路徑的計(jì)算以瀏覽器地址欄為準(zhǔn)。
struts2中可以使用命名空間,來(lái)保證瀏覽器地址欄中的目錄層次與服務(wù)器端目錄層次的一致性,這樣程序員通過(guò)服務(wù)器端的目錄層次計(jì)算相對(duì)路徑,在瀏覽器中也是正常的。
但我們理解了原理,就算不使用命名空間,自己也有強(qiáng)大的控制力。
相關(guān)文章
在JSP中訪問(wèn)數(shù)據(jù)庫(kù)大全
在JSP中訪問(wèn)數(shù)據(jù)庫(kù)大全...2006-10-10jsp Request獲取url信息的各種方法對(duì)比
下面小編就為大家?guī)?lái)一篇jsp Request獲取url信息的各種方法對(duì)比。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-10-10基于jsp+servlet實(shí)現(xiàn)的簡(jiǎn)單博客系統(tǒng)實(shí)例(附源碼)
這篇文章主要介紹了基于jsp+servlet實(shí)現(xiàn)的簡(jiǎn)單博客系統(tǒng),以完整實(shí)例形式分析了基于jsp+servlet簡(jiǎn)單博客系統(tǒng)的原理與相關(guān)技巧,并附帶了完整源碼供讀者下載學(xué)習(xí),需要的朋友可以參考下2015-09-09Eclipse開(kāi)發(fā)Hibernate應(yīng)用程序
Eclipse開(kāi)發(fā)Hibernate應(yīng)用程序...2006-10-10