日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

HTML、JSP、Servlet中的相对路径和绝对路径 页面跳转问题

發布時間:2025/3/20 HTML 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HTML、JSP、Servlet中的相对路径和绝对路径 页面跳转问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HTML、JSP、Servlet中的相對路徑和絕對路徑

前提:

假設你的Http地址為http://192.168.0.1/,你的web應用為test,path=”/test”,那么你的web應用URL為http://192.168.0.1/test/

web項目目錄分析,文件存放位置

1)如果JSP,JS文件放在WEB-INF目錄下**【服務器外部】**是根本無法訪問的。2)放在WEB-INF目錄下的JSP文件,可以通過服務器內部轉向進行訪問(主要是為了頁面的安全)3)因為JS是通過客戶端向服務器請求的(即需要能夠從服務器外部訪問),所以圖片以及一些JS,CSS只能放在WEB-INF外面

web應用的目錄結構:

等效于下圖

src: 存放java源碼,編譯后的文件都會放在WEB-INF下的classes文件夾下
WebContent:項目創建完后,只有這個目錄有用,因為web項目需要的所有文件都在這里。

web.xml

<servlet-mapping> <servlet-name>handleservlet</servlet-name> <url-pattern>/handleservlet</url-pattern>此映射是相對于當前web應用的 </servlet-mapping>

所有相對路徑都是由”/”開頭的

比如:/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中,即user是a.html在同一個目錄 。
../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/test/的。

其用到的地方有:

1)forward:servlet中的request.getRequestDispatcher(address);這個address是在服務器端解析的。
所以你要forward到user/a.jsp應該這么寫:

request.getRequestDispatcher("/user/a.jsp ")

這個/相對于當前的web應用test,其絕對地址就是:http://192.168.0.1/test/user/a.jsp。

2)redirect:在jsp中

<%response.sendRedirect("/rtccp/user/a.jsp");%>

2、 客戶端的地址

所有的html中的相對地址都是相對于http://192.168.0.1/的,而不是http://192.168.0.1/test/的 。

html中的form表單的action屬性的地址應該是相對于http://192.168.0.1/的。所以,如果提交到user/a.jsp為:action=”/test/ user/a.jsp” ;提交到servlet為action=”/test/handleservlet”

Javascript也是在客戶端解析的,所以其相對路徑和form表單一樣。


3、 站點根目錄和css路徑問題 (jsp是服務器端程序,地址是變化的,引用時一般用站點根目錄的相對路徑)

我們稱類似這樣的相對路徑/test/…. 為相對于站點根目錄 的相對路徑 。

當在jsp中引入css時,如果其相對路徑相對于當前jsp文件的,而在一個和這個jsp的路徑不一樣的servlet中forward這個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的文件(a.jsp)的相對路徑 。而在servlet中轉發時就是相對于這個servlet的相對路徑了,因為jsp路徑和servlet路徑是不一樣的 ,所以這樣的引用肯定是出錯的。

所以這個時候,要用站點根目錄,就是相對于http://192.168.0.1/的目錄,以“/”開頭。

因此上述錯誤應更正為href=”/test/one.css” 類似的站點根目錄的相對目錄。這樣在servlet轉發后和jsp中都是相對于站點根目錄的相對路徑 ,就能正確使用所定義的css樣式了。

頁面跳轉問題:

Forward(轉發)和Redirect(重定向)

1)Forward 效率高, Redirect 效率低。

因為Redirect 的流程是這樣的: request1 sent to server, server return back to client, 然后request2 then sent to server. 但是Forward 僅在server side處理, 對client side 是透明的. 由于Redirect 有兩次傳輸, 所以效率低.

2)范圍:

由于對request.setAttribute() 來說, 它攜帶的對象生存范圍只在request內, 所以Redirect 方式會導致request攜帶的對象丟失。所有需要攜帶數據時,必須選用forward方式。

3)使用說明:

1. sendRedirect

servlet和jsp里面一樣response.sendRedirect();

2. include

這種也是上面提到的forward形式,request的值會保存

1) servlet里面request.getRequestDispatcher("jsp2.jsp" ).include(request, response); 2) jsp里面<jsp:include page= "include.jsp" />

說明
頁面會同時包含頁面1和頁面2的內容,地址欄不變。
使用request.setAttribute的內容,可以正常使用

3. forword

1) servlet里面request.getRequestDispatcher("jsp2.jsp" ).forward(request,response); 2) jsp里面<jsp:forward page= "include.jsp" />

說明
頁面會是頁面2的內容,地址欄不變
使用request.setAttribute的內容,可以正常使用

4.JSP中用相對路徑引用JS,CSS文件的三種情況

第一種情況 最常見的情況

一個tomcat上都跑多個工程, 用工程名來區分.

因為我的的URL是 :http://localhost/工程名 /home/index.jsp
多了一個工程名,所以要加 <%=request.getContextPath() %>
如:

<script src="<%=request.getContextPath() %> /home/test.js"></script>

寫<%=request.getContextPath() %>太麻煩,可以在每一個jsp文件頂部加入以下內容后,

<% String path = request.getContextPath(); String basePath = request.getScheme()+"://" +request.getServerName()+":" +request.getServerPort()+path+"/" ; %> <base href="<%=basePath%>" >

就可直接使用

<script src=" /home/test.js"></script>了

第二, 直接訪問jsp文件

真實項目中, 一個tomcat上要是也跑了多個工程, 并用IP來區分.

url 是這樣的: http://localhost/home/index.jsp 注意這里,是直接訪問JSP文件(jsp文件不在web-inf下,可以直接訪問),不是servlet也不是struts 。

test2.js 與index.jsp 放在同一文件夾下,下面用相對路徑來引入JS文件 是OK 的:

<script src=test2.js></script>

index.jsp可以找到test2.js文件

第三種情況: servlet轉發到jsp(jsp在web-inf下,必須用servlet或action訪問)

在第二情況的基礎上,一個tomcat上要是也跑了多個工程, 并用IP來區分。

我們訪問的是servlet 或是struts的action , 再轉發到 index.jsp

url 是: http://localhost/*.do

url 是: http://localhost/index.action

這里不是訪問JSP文件了

下面是OK 的.

<script src=/home/ test2.js></script>test2.js 前面一定要有/home/

實際項目中, 訪問 servlet或是struts的action最多, 所以這里要使用

<script src=/home/test2.js></script>。

請尊重原創:原文地址–http://blog.csdn.net/wym19830218/article/details/5503533/
本文是在該文章基礎上進行修改整理的。

總結

以上是生活随笔為你收集整理的HTML、JSP、Servlet中的相对路径和绝对路径 页面跳转问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。