1 絕對(duì)路徑與相對(duì)路徑
絕對(duì)路徑就是以http開頭,例如:http://localhost/hello/index.jsp,這就是絕對(duì)路徑。但這并不是我們要研究的,我們要研究的是相對(duì)路徑。
相對(duì)路徑需要有父路徑,即相對(duì)路徑相對(duì)的誰!例如:index.jsp、jsps\index.jsp,這都是相對(duì)路徑。相對(duì)路徑一定要有一個(gè)父路徑,也就是說我們需要把相對(duì)路徑轉(zhuǎn)換成絕對(duì)路徑。
大多數(shù)情況下我們都是使用相對(duì)路徑,而不是絕對(duì)路徑。因?yàn)檫@有助與我們發(fā)布、部署項(xiàng)目。我們?cè)诒緳C(jī)上的主機(jī)名可能為127.0.0.1,但是當(dāng)項(xiàng)目開發(fā)結(jié)束后會(huì)放到服務(wù)器機(jī)上,在公網(wǎng)上使用。這時(shí)的主機(jī)IP,以及域名就不再是我們現(xiàn)在使用的域名了。所以,相對(duì)路徑要方便我們的項(xiàng)目移置。
2 與客戶端相關(guān)的相對(duì)路徑
與客戶端相關(guān)的相對(duì)路徑大多數(shù)都是在網(wǎng)頁中,例如超鏈接、表單等。還有重定向指定的路徑也是與客戶端相關(guān)的路徑。respnse.sendRedirect(“BServlet”),其中BServlet就是一個(gè)相對(duì)路徑。
相對(duì)路徑分為兩種,一種是以“/”開頭,另一種是不以“/”開頭。其中以“/”開頭的相對(duì)路徑表示其父路徑是當(dāng)前主機(jī)。不以“/”開頭的相對(duì)路徑表示其父路徑是當(dāng)前路徑。
例如response.sendRedirect(“/hello/BServlet”)以“/”開頭,那么就是主機(jī)的相對(duì)路徑,即主機(jī)地址加上相對(duì)路徑:http://localhost/hello/BServlet。其中hello是上下文路徑!
例如<a href=”/hello/BServlet”>BSERVLET</a>,也是以“/”開頭,而且超鏈接與重定向都是與客戶端相關(guān)的路徑,所以都是http://localhost/hello/BServlet。
下面我們要討論一下不以“/”開頭的相對(duì)路徑。它是比較讓人頭痛的相對(duì)路徑!而且我們也不建議使用它?。。?br />
上面已經(jīng)說了,不以“/”開頭的相對(duì)路徑是當(dāng)前路徑的相對(duì)路徑,即父路徑是當(dāng)前路徑。那什么又是當(dāng)前路徑呢?例如在http://localhost/hello/jsps/index.jsp頁面中存在一個(gè)超鏈接,其內(nèi)容為:<a href=”BServlet”>BSERVLET</a>,那么父路徑就是http://localhost/hello/jsps/,也就是與當(dāng)前index.jsp頁面在同一父路徑下:http://localhost/hello/jsps/BSERVLET。
在http://localhost/hello/servlet/AServlet中的重定向語句為response.sendRedirct(“BServlet”),那么重定向的路徑為:http://localhost/hello/servlet/BServlet。
在要注意,我們?cè)诨A(chǔ)班中學(xué)習(xí)過HTML,知道什么叫<base>元素了,<base>元素會(huì)影響當(dāng)前頁面中所有相對(duì)路徑的父路徑。
當(dāng)頁面中存在<base>時(shí),那么不以“/”開頭的相對(duì)路徑都是<base>元素的href屬性值加上相對(duì)路徑。例如<base>元素的href屬性值為http://localhost/day07_02/,頁面中相對(duì)路徑為a.jsp,那么相對(duì)路徑轉(zhuǎn)換成絕對(duì)路徑后為:http://localhost/day07_02/a.jsp。也就是說在沒有<base>時(shí),是當(dāng)前路徑的相對(duì)路徑,在有了<base>后,那么就是<base>的href屬性值的相對(duì)路徑了!
注意,如果是以“/”開頭的相對(duì)路徑,永遠(yuǎn)都是主機(jī)的相對(duì)路徑,即http://localhost/。
3 與Tomcat(服務(wù)器)相關(guān)的相對(duì)路徑
與Tomcat相關(guān)的相對(duì)路徑就是Tomcat內(nèi)部的相對(duì)路徑,例如在web.xml文件中的<url-pattern>元素的內(nèi)容,還有請(qǐng)求轉(zhuǎn)發(fā)時(shí)的路徑,這些都是與Tomcat相關(guān)的相對(duì)路徑。
在<url-pattern>中必須以“/”開頭(除非使用了通配符),與Tomcat相關(guān)的相對(duì)路徑,如果以“/”開頭,那么父路徑就是當(dāng)前上下文路徑。
對(duì)于<url-pattern>沒有什么可說的,因?yàn)樗仨氁?ldquo;/”開頭,所以容易理解。但是對(duì)于請(qǐng)求轉(zhuǎn)發(fā)就不一樣了。請(qǐng)求轉(zhuǎn)發(fā)可以以“/”開頭,也可以不以“/”開頭!
以“/”開頭表示相對(duì)上下文路徑(http://localahost/day07_02),不以“/”開頭,那么相對(duì)當(dāng)前路徑。
4 規(guī)范路徑的編寫
建議大家一律使用“/”開頭來編寫相對(duì)路徑,無論是頁面中,還是Servlet中,都以“/”開頭來編寫。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://m.8y3kgpwe.cn/javaee