本資源引自: 頁面轉(zhuǎn)發(fā)引起文件路徑失效 - 柳松 廊坊師范學(xué)院 七期信息技術(shù)提高班 - 博客頻道 - CSDN.NET http://blog.csdn.net/liusong0605/article/details/7888033 ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- 轉(zhuǎn)發(fā)和重定向的區(qū)別之一是:采用轉(zhuǎn)發(fā),URL不會發(fā)生變化。即從一個servlet轉(zhuǎn)發(fā)到一個jsp頁面,url仍為servlet的地址。這樣,原來jsp頁面中使用到相對路徑的地方要進行修改。否則,是找不到文件的。 例如:假設(shè)jsp頁面在project文件夾下,css源文件在project/style文件夾下。 從servlet轉(zhuǎn)發(fā)到j(luò)sp頁面的地址為http://localhost:8080/ project/item/Servlet/ShowItemServlet, jsp頁面中引入css文件的地址為<link rel="stylesheet"href="style/css.css">, 這時,就出現(xiàn)了調(diào)用頁面的url和被調(diào)用頁面的url不一致,相當(dāng)于css文件的地址為http://localhost:8080/ project/item/Servlet/ShowItemServlet/syle/css.css ,這樣,css文件自然是無法找到的。
解決辦法: 1. 修改頁面中元素的路徑。 將引入的css的鏈接改為<link rel="stylesheet"href="../style/css.css">,即先由servlet的地址退回到project目錄下,這樣,就找到了project/style/css.css文件了。 缺點:如果servlet的路徑較深,這樣做容易出現(xiàn)錯誤,并且,頁面中所有的鏈接全部都要進行這樣的修改,所以,不推薦這樣的修改方式。
在html的頭部加入<base href="http://localhost:8080/project/">,其他引入文件的地址不變,仍為<link rel="stylesheet" href="style/css.css">,這樣,css文件的路徑是正確的。
默認情況下,頁面中的相對路徑,都是相對于當(dāng)前URL請求的地址去尋找資源的。html中的base標(biāo)簽,用來設(shè)置當(dāng)前頁面的默認起始路徑,設(shè)置了base標(biāo)簽后,瀏覽器不再使用當(dāng)前文檔的URL,而是使用指定的url來解析頁面中所有的相對URL。 原理就是上面講的這些,但是,在實際的項目中,base標(biāo)簽中的url一般不會直接寫死在代碼中,而是通過動態(tài)獲取得到。 String path =request.getContextPath(); String basePath =request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; <base href="basePath">
Request.getcontextPath: 得到項目的名字 /project Request.getSchema() 返回頁面使用的協(xié)議名稱 這里使用的是http協(xié)議 Request.getServerName() 返回當(dāng)前頁面所在的服務(wù)器的名字 如果是本機,就為localhost Request.getServerPort() 返回當(dāng)前頁面所在的服務(wù)器使用的端口 |
|