JSP 和 Servlet 中的絕對路徑和相對路徑問題
JSP 和 Servlet 中的絕對路徑和相對路徑問題困擾了我好幾天,經過努力之後將其部分心得和大家共享。
前提:假設你的 Http 地址為 http://192.168.0.1/ 你的 web 應用為 webapp ,那麼你的 web 應用 URL 為 http://192.168.0.1/webapp/
web 應用的目錄結構:
webapp/
web-inf/
classes/
lib/
web.xml
<servlet-mapping>
<servlet-name>handleservlet</servlet-name>
<url-pattern>/handleservlet</url-pattern> 此對映是相對於當前 web 應用的
</servlet-mapping>
user/
a.jsp
b.jsp
images/
css/
js/
所有相對路徑都是由“ / ”開頭的。如: /image/a.gif , /user/main.jsp ,大家知道在 html 中的相對路徑是這樣的:
有個 html 檔案: a.html ,其中有 <link href="one.css" rel="stylesheet" type="text/css"> ,其中 href 屬性表示引用的 css 檔案的路徑。
one.css :表示 one.css 和 a.hmtl 處於同一個目錄
user/one.css :表示 one.css 處於 a.html 所在目錄的子目錄 user 中。
../one.css :表示 one.css 位於 a.hmtl 上一級目錄下,
../../one.css :表示 one.css 位於 a.hmtl 上一級目錄的上一級目錄下,
./ :表示和 a.hmtl 同一目錄
我們稱上述相對路徑為 html 相對路徑
1、 伺服器端的地址
伺服器端的相對地址指的是相對於你的 web 應用的地址,這個地址是在伺服器端解析的(不同於 html 和 javascript 中的相對地址,他們是由客戶端瀏覽器解析的)也就是說這時候在 jsp 和 servlet 中的相對地址應該是相對於你的 web 應用,即相對於 http://192.168.0.1/webapp/的。
其用到的地方有:
forwarder : servlet 中的 request.getRequestDispatcher(address); 這個 address 是在伺服器端解析的,所以,你要 forwarder 到 a.jsp 應該這麼寫: request.getRequestDispatcher(“/user/a.jsp”) 這個 / 相對於當前的 web 應用 webapp ,其絕對地址就是: http://192.168.0.1/webapp/user/a.jsp。
sendRedirect :在 jsp 中 <%response.sendRedirect("/rtccp/user/a.jsp");%>
2、 客戶端的地址
所有的 html 中的相對地址都是相對於 http://192.168.0.1/ 的,而不是 http://192.168.0.1/webapp/ 的。
Html 中的 form 表單的 action 屬性的地址應該是相對於 http://192.168.0.1/ 的,所以,如果提交到 a.jsp 為: action = ”/webapp/user/a.jsp”;提交到 servlet 為 action = ”/webapp/handleservlet”
Javascript 也是在客戶端解析的,所以其相對路徑和 form 表單一樣。
3、 站點根目錄和 css 路徑問題
我們稱類似這樣的相對路徑 /webapp/…. 為相對於站點根目錄的相對路徑。
當在 jsp 中引入 css 時,如果其相對路徑相對於當前 jsp 檔案的,而在一個和這個 jsp 的路徑不一樣的 servlet 中 forwarder 這個 jsp 時,就會發現這個 css 樣式根本沒有起作用。這是因為在 servlet 中轉發時 css 的路徑就是相對於這個 servlet 的相對路徑而非 jsp 的路徑了。所以這時候不能在 jsp 中用這樣的路徑: <link href="one.css" rel="stylesheet" type="text/css"> 或者 <link href="../../one.css" rel="stylesheet" type="text/css"> 類似 href="one.css" 和 ../../one.css 的 html 相對路徑是相對於引用這個 css 的檔案的相對路徑。而在 servlet 中轉發時就是相對於這個 servlet的相對路徑了,因為 jsp 路徑和 servlet 路徑是不一樣的,所以這樣的引用肯定是出錯的。
所以這個時候,要用站點根目錄,就是相對於 http://192.168.0.1/ 的目錄,以“ / ”開頭。
因此上述錯誤應更正為 href=”/webapp/one.css” 類似的站點根目錄的相對目錄。這樣在 servlet 轉發後和 jsp 中都是相對於站點根目錄的相對路徑,就能正確使用所定義的 css 樣式了。
說了這麼多,不知道你瞭解沒,有什麼問題留言,大家一塊交流!
相關文章
- JSP、Servlet中的相對路徑和絕對路徑 頁面跳轉問題JSServlet
- Jsp相對路徑和絕對路徑JS
- html中的路徑的介紹:絕對路徑和相對路徑HTML
- struts/Servlet,action轉到jsp後,路徑問題(struts2,jsp路徑,action路徑,action跳轉,相對路徑,絕對路徑)...ServletJS
- 檔案絕對路徑和相對路徑
- 檔案的相對路徑和絕對路徑以及根相對路徑
- 絕對路徑和相對路徑的區別,
- 絕對路徑和相對路徑的區別
- JavaWeb 專案中的絕對路徑和相對路徑以及問題的解決方案JavaWeb
- Linux檔案的路徑定位-相對路徑和絕對路徑Linux
- 05_Linux相對路徑和絕對路徑Linux
- web專案絕對路徑與相對路徑的問題Web
- HTML絕對路徑與相對路徑HTML
- Linux中絕對路徑和相對路徑有什麼區別?Linux
- 最最基礎的乾貨:Linux中的絕對路徑和相對路徑Linux
- Qt的相對路徑轉為絕對路徑QT
- 深入解析Java絕對路徑與相對路徑Java
- javascript將相對路徑修改為絕對路徑JavaScript
- JAVAWEB——絕對路徑和相對路徑,到底加不加“/“,以及解決方案JavaWeb
- JSP取得絕對路徑JS
- nodejs路徑處理方法和絕對路徑NodeJS
- html中想把圖片絕對路徑 改成相對路徑怎麼操作?HTML
- Linux中絕對路徑和相對路徑是什麼?二者有何區別?Linux
- 相對路徑轉換為絕對路徑的程式碼例項
- python如何將相對路徑轉換為絕對路徑?Python
- 使用Javascript將相對路徑地址轉換為絕對路徑JavaScript
- 關於函式由絕對路徑轉為相對路徑函式
- 好程式設計師web分享圖片標籤、絕對路徑和相對路徑程式設計師Web
- VsCode相對路徑的問題VSCode
- 好程式設計師web前端分享絕對路徑與相對路徑的引用程式設計師Web前端
- 好程式設計師分享html圖片絕對路徑改相對路徑程式設計師HTML
- java web中servlet、jsp、html 互相訪問的路徑問題JavaWebServletJSHTML
- Java工程路徑及相對路徑(轉載)Java
- PHP取url絕對路徑PHP
- vue2.0 配置絕對路徑Vue
- javaweb相對路徑file使用JavaWeb
- 檔案路徑問題( ./ 和 ../ 和 @/ )
- vue cli 關於使用絕對路徑引用圖片的問題Vue