日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

jsp中的basePath和path (绝对路径 相对路径)

發(fā)布時間:2025/3/20 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsp中的basePath和path (绝对路径 相对路径) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)載請注明原文出處:http://blog.csdn.net/baidu_37107022/article/details/75233392


在JSP中的如果使用 “相對路徑” 則有可能會出現(xiàn)問題.

因為網(wǎng)頁中的 “相對路徑” , 他是相對于 “URL請求的地址” 去尋找資源.
上面這句話是什么意思呢 ?

舉個例子:

假如我們有一個項目: MyApp

在該項目下, 有一個jsp文件夾 該文件夾下包括: login.jsp // 登陸頁面 register.jps // 注冊頁面

我們在瀏覽器中輸入地址 (注意: 地址的內(nèi)容):

http://localhost:8080/MyApp/jsp/login.jsp

這時候, 瀏覽器會鏈接到 “登陸頁面” (login.jsp)

在login.jsp頁面中有一個注冊鏈接:

<a href="jsp/register.jsp">注冊用戶 </a>

那么,如果我們點擊這個鏈接,就會在瀏覽器地址欄中, 出現(xiàn)如下錯誤鏈接:

http://localhost:8080/MyApp/jsp/jsp/register.jsp

為什么會出現(xiàn)”/jsp/jsp/register.jsp”呢?

因為, 網(wǎng)頁中的”相對鏈接”, 是相對于你所 “請求的URL路徑” 所決定的.

因為這里請求路徑是:http://localhost:8080/MyApp/jsp/login.jsp
那么, 瀏覽器 就會在這個路徑下(即:http://localhost:8080/MyApp/jsp/)去找jsp/register.jsp

所以就會出現(xiàn)如下錯誤內(nèi)容:
http://localhost:8080/MyApp/jsp/jsp/register.jsp

上面的問題,就是調(diào)用頁面和被調(diào)用頁面的URL不同所造成的

此類錯誤也常常會出現(xiàn)在2個頁面之間進行 “轉(zhuǎn)發(fā)”(forward) 操作的時候。
因為forward是在后臺進行的,對客戶端來說是透明的。(即: URL不改變,而數(shù)據(jù)內(nèi)容卻是另一個頁面返回來的。。。)

那么如何解決這問題呢?

方法一:直接采用絕對路徑 (不推薦)

在JSP頁面端,獲得本項目的絕對地址(如果你的項目叫MyApp,那么獲得到的地
址就是 http://localhost:8080/MyApp/):

代碼如下:

<!-- **************方法一***************** --> <%@ page language="java" pageEncoding="GBK"contentType="text/html;charset=gbk" isELIgnored="false"%> <%String path = request.getContextPath();// 獲得本項目的地址(例如: http://localhost:8080/MyApp/)賦值給basePath變量 String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";// 將 "項目路徑basePath" 放入pageContext中,待以后用EL表達(dá)式讀出。 pageContext.setAttribute("basePath", basePath); %> <html><head></head><body><a href="${pageScope.basePath}jsp/register.jsp"></body> </html> <!-- *************************************-->

我們可以看到,在標(biāo)簽 <a>中的href屬性內(nèi),我們直接采用了 “本項目路徑 ${pageScope.basePath}” 加上 "jsp/register.jsp" , 從而構(gòu)成一個絕對路徑(即: http://localhost:8080/MyApp/jsp/register.jsp)

但是這樣做有一個很不好的地方,那就是我們必須要在每個鏈接的前面都要加上“${pageScope.basePath}”

如果這樣做的話,將是一件很可怕的事情。

方法二: 利用html中的 <base>標(biāo)簽(推薦)

下面是對html中的 <base>的介紹:

base 元素可規(guī)定頁面中所有鏈接的基準(zhǔn) URL 默認(rèn)情況下,頁面中的鏈接(包括樣式表、腳本和圖像的地址)都是相對于當(dāng)前 頁面的地址(即:瀏覽器地址欄里的請求URL)。

我們可以使用 <base>標(biāo)簽中的href屬性來設(shè)置,所有的“相對基準(zhǔn) URL”。

上面說的是什么意思呢?我們來看看代碼就知道咯~~

這是JSP端的代碼 ,下面的代碼 (十分類似上面 “方法一” 中的JSP代碼)
但是這里我們并沒有采用 ${pageScope.basePath}+”相對路徑地址” 的方法,
而是采用了html文件中的 <base>標(biāo)簽:

代碼如下:

<!-- *************JSP代碼******************--> <%@ page language="java" pageEncoding="GBK"contentType="text/html;charset=gbk" isELIgnored="false"%> <%String path = request.getContextPath();// 獲得項目完全路徑(假設(shè)你的項目叫MyApp,那么獲得到的地址就是http://localhost:8080/MyApp/): String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/"; %> <html> <head><!-- base需要放到head中 --><base href=" <%=basePath%>"> </head><!-- 這里我們就可以直接使用相對路徑(即: 相對于base標(biāo)簽) --><a href="jsp/login.jsp">Login </a> </html> <!-- *************************************-->

大概看完了上面的代碼,或許您還是有些疑惑
不過當(dāng)您看到了,下面的代碼,可能就豁然開朗了。

當(dāng)我們?nèi)?zhí)行上面的那段JSP代碼后,我們可以在瀏覽器中可以查看,他所返回給客戶端的html代碼:
執(zhí)行完上述JSP后,所返回的html代碼如下:

<html> <head> <base href="http://localhost:8080/MyApp/"> </head> <!-- // 設(shè)置了 <base>后,相對路徑,相對于的就是base中的路徑,而不再是瀏覽器 地址的請求路徑啦~~~ --> <a href="jsp/login.jsp">Login </a> </html>

我們可以看到JSP返回的html代碼中,包含了 <base href="http://localhost:8080/MyApp/">內(nèi)容。

也就是說,在本html文件中,遇到的所有 “相對鏈接(例如: <a href="jsp/login.jsp">)”,都是相對于base 路徑(即:http://localhost:8080/MyApp/),所以我們就可以進行的使用 相對鏈接,而不必?fù)?dān)心, 轉(zhuǎn)發(fā)操作(forward)或 請求地址不同不同所造成的頁面無法找到的錯誤啦~(即:HTTP: 404)。。。

總結(jié)

以上是生活随笔為你收集整理的jsp中的basePath和path (绝对路径 相对路径)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。