JSP、Servlet中的相對(duì)路徑和絕對(duì)路徑_JSP教程
推薦:用 jspinclude 控制動(dòng)態(tài)內(nèi)容在新的 JSP 最佳實(shí)踐系列的前一篇文章中,您了解了如何使用 JSP include 偽指令將諸如頁(yè)眉、頁(yè)腳和導(dǎo)航組件之類的靜態(tài)內(nèi)容包含到 Web 頁(yè)面中。和服務(wù)器端包含一樣,JSP include 偽指令允
JSP和Servlet中的絕對(duì)路徑和相對(duì)路徑問題困擾了我好幾天,經(jīng)過努力之后將其部分心得和大家共享。
前提:假設(shè)你的Http地址為http://192.168.0.1/你的web應(yīng)用為webapp,那么你的web應(yīng)用URL為http://192.168.0.1/webapp/
web應(yīng)用的目錄結(jié)構(gòu):
webapp/
web-inf/
classes/
lib/
web.xml
handleservlet
/handleservlet此映射是相對(duì)于當(dāng)前web應(yīng)用的
user/
a.jsp
b.jsp
images/
css/
js/
所有相對(duì)路徑都是由“/”開頭的。如:/image/a.gif,/user/main.jsp,大家知道在html中的相對(duì)路徑是這樣的:
有個(gè)html文件:a.html,其中有,其中href屬性表示引用的css文件的路徑。
one.css:表示one.css和a.hmtl處于同一個(gè)目錄
user/one.css:表示one.css處于a.html所在目錄的子目錄user中。
../one.css:表示one.css位于a.hmtl上一級(jí)目錄下,
../../one.css:表示one.css位于a.hmtl上一級(jí)目錄的上一級(jí)目錄下,
./:表示和a.hmtl同一目錄
我們稱上述相對(duì)路徑為html相對(duì)路徑
1、服務(wù)器端的地址
服務(wù)器端的相對(duì)地址指的是相對(duì)于你的web應(yīng)用的地址,這個(gè)地址是在服務(wù)器端解析的(不同于html和javascript中的相對(duì)地址,他們是由客戶端瀏覽器解析的)也就是說這時(shí)候在jsp和servlet中的相對(duì)地址應(yīng)該是相對(duì)于你的web應(yīng)用,即相對(duì)于http://192.168.0.1/webapp/的。
其用到的地方有:
forwarder:servlet中的request.getRequestDispatcher(address);這個(gè)address是在服務(wù)器端解析的,所以,你要forwarder到a.jsp應(yīng)該這么寫:request.getRequestDispatcher(“/user/a.jsp”)這個(gè)/相對(duì)于當(dāng)前的web應(yīng)用webapp,其絕對(duì)地址就是:http://192.168.0.1/webapp/user/a.jsp。
sendRedirect:在jsp中
2、客戶端的地址
所有的html中的相對(duì)地址都是相對(duì)于http://192.168.0.1/的,而不是http://192.168.0.1/webapp/的。
Html中的form表單的action屬性的地址應(yīng)該是相對(duì)于http://192.168.0.1/的,所以,如果提交到a.jsp為:action=”/webapp/user/a.jsp”;提交到servlet為action=”/webapp/handleservlet”
javascript也是在客戶端解析的,所以其相對(duì)路徑和form表單一樣。
3、站點(diǎn)根目錄和css路徑問題
我們稱類似這樣的相對(duì)路徑/webapp/….為相對(duì)于站點(diǎn)根目錄的相對(duì)路徑。
當(dāng)在jsp中引入css時(shí),如果其相對(duì)路徑相對(duì)于當(dāng)前jsp文件的,而在一個(gè)和這個(gè)jsp的路徑不一樣的servlet中forwarder這個(gè)jsp時(shí),就會(huì)發(fā)現(xiàn)這個(gè)css樣式根本沒有起作用。這是因?yàn)樵趕ervlet中轉(zhuǎn)發(fā)時(shí)css的路徑就是相對(duì)于這個(gè)servlet的相對(duì)路徑而非jsp的路徑了。所以這時(shí)候不能在jsp中用這樣的路徑:或者類似href="one.css"和../../one.css的html相對(duì)路徑是相對(duì)于引用這個(gè)css的文件的相對(duì)路徑。而在servlet中轉(zhuǎn)發(fā)時(shí)就是相對(duì)于這個(gè)servlet的相對(duì)路徑了,因?yàn)閖sp路徑和servlet路徑是不一樣的,所以這樣的引用肯定是出錯(cuò)的。
所以這個(gè)時(shí)候,要用站點(diǎn)根目錄,就是相對(duì)于http://192.168.0.1/的目錄,以“/”開頭。
因此上述錯(cuò)誤應(yīng)更正為href=”/webapp/one.css”類似的站點(diǎn)根目錄的相對(duì)目錄。這樣在servlet轉(zhuǎn)發(fā)后和jsp中都是相對(duì)于站點(diǎn)根目錄的相對(duì)路徑,就能正確使用所定義的css樣式了。
分享:JSP和Servlet對(duì)中文的處理過程世界上的各地區(qū)都有本地的語(yǔ)言。地區(qū)差異直接導(dǎo)致了語(yǔ)言環(huán)境的差異。在開發(fā)一個(gè)國(guó)際化程序的過程中,處理語(yǔ)言問題就顯得很重要了。 這是一個(gè)世界范圍內(nèi)都存在的問題,所以,Java提供
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁(yè)模板:關(guān)于jsp頁(yè)面使用jstl的異常分析
- JSP頁(yè)面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁(yè)上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
JSP教程Rss訂閱編程教程搜索
JSP教程推薦
- 分割字符串以增強(qiáng)J2ME的String能力
- jstl實(shí)現(xiàn)在jsp中動(dòng)態(tài)添加下拉列表項(xiàng)
- JSP的特點(diǎn)和其它動(dòng)態(tài)網(wǎng)頁(yè)開發(fā)技術(shù)比較
- JavaBean 在jsp和serlvle中傳遞技術(shù)要點(diǎn)
- Spring學(xué)習(xí)基礎(chǔ)---多框架集成
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- 什么是模式?什么是框架?
- JSP 從配置文件獲取參數(shù)詳解
- jsp中freemarker 數(shù)字格式化
- 處理jsp顯示文字過長(zhǎng)問題的解決方法
- 相關(guān)鏈接:
- 教程說明:
JSP教程-JSP、Servlet中的相對(duì)路徑和絕對(duì)路徑
。