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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jsp的相对路径问题

發布時間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsp的相对路径问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

test2.js? 與index.jsp?放在同一文件夾下,比如: web應用/home/下面.

?

要把test2.js?引入到?index.jsp中,? 針對三種情況,分析如下:

?

----------------------------------------------------------

?

第一種情況?
一般在學習時, 一個tomcat上都跑多個工程, 用工程名來區分
因為我的的URL是 :http://localhost/工程名?/home/index.jsp
多了一個工程名,所以要加 <%=request.getContextPath()?%>
如下:
<script?src="<%=request.getContextPath()?%>?/home/test.js"></script>

?

---------------------------------------------------------------------------------

第二,? 訪問JSP文件時, 用相對路徑引入JS,CSS文件是OK的

?

真實項目中,? 一個tomcat上要是也跑了多個工程, 并用IP來區分
url 是這樣的:??http://localhost/home/index.jsp?????注意這里,是直接訪問JSP文件,不是servlet,不是struts?.
test2.js? 與index.jsp?放在同一文件夾下
下面用相對路徑來引入 JS文件 是OK 的:
<script?src=test2.js></script>

?

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

?

?

------------------------------------------------------------------------------


第三種情況:

?

在第二情況的基礎上, 我們訪問的是?servlet?或是struts的action? ,?再轉發到?index.jsp?


url 是:? http://localhost/***.do? 這里不是訪問JSP文件了

?

下面是OK 的.
<script?src=home/test2.js></script>

test2.js? 前面一定要有home/

實際項目中, 訪問 servlet或是struts的action最多, 所以這里要注意 了.

?

?

下面是錯誤的, index.jsp找不到test2.js文件

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

?本來在 "第二種情況"中, 上面是OK的, 但現在情況有點不同了,不是訪問JSP文件了,訪問的是 servlet或是struts的action了.

?

?

-------------------------------------------------------------------------------

?

??????? 對上面現象的分析:?(源自網絡)

?

一. 我們平常?說的 "相對路徑?": 適用于"第二種情況"

?

有個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上一級目錄下,?

http://www.cnblogs.com/one.css:表示one.css位于a.hmtl上一級目錄的上一級目錄下,?

./:表示和a.hmtl同一目錄?

我們稱上述相對路徑為html相對路徑

?

?

?

?

二.?服務器端的相對路徑? ,??適用 于"第三種情況"

?

服務器端的相對地址指的是相對于你的web應用的地址,這個地址是在服務器端解析的(不同于html和javascript中的相對地址,他們是由客戶端 瀏覽器解析的)也就是說這時候在jsp和servlet中的相對地址應該是相對于你的web應用,即相對于http://192.168.0.1 /webapp/的。

?

?

?假設Web應用road中,應用的根路徑下有一個dir1文件夾和dir2文件夾。c.jsp在dir1中,a.jsp和b.jsp在dir2中。Web應用的結構如圖所示。?

?????? + root?
?????????? -dir1?
?????????????? c.jsp?
?????????? -dir2?
?????????????? a.jsp?
?????????????? b.jsp?

  • JSP頁面中正確的路徑表示 假設在a.jsp頁面中有兩個鏈接,分別鏈接到b.jsp和c.jsp頁面。?
  • ?

    • 直接寫路徑表示和頁面在同一個文件夾下面,如<a href="b.jsp">b.jsp</a>
    • "../"表示當前文件夾的上一級文件夾(相對路徑),如: ???? <a href="../dir2/b.jsp">b.jsp</a>,?

    ?

    • ???? <a href="../dir1/c.jsp">c.jsp</a>
    • "/"表示 http://機器IP:8080(絕對路徑),如: ???? <a href="/road/dir2/b.jsp">b.jsp</a>?

    ?

    • ???? <a href="/road/dir1/c.jsp">c.jsp</a>?



  • Servlet中正確的路徑表示
    • 轉發請求時:"/"表示“http://服務器IP:8080/Web應用名”,例如: ??? String forward = "/dir1/c.jsp";?

    ?

    • ??? RequestDispatcher rd = request.getQRequestDispatcher(forward);
    • 重定向時:“/”? 表示“http://機器IP:8080”,而通過request.getContextPath()得到的是:“http://機器IP:8080/Web應用名”,例如: ???? String str =? request.getContextPath();?

    ?

    • ???? response.sendRedirect(str + "/dir1/c.jsp");?

    ?

  • 配置文件web.xml中 ?? url-mapping中,"/"表示“http://IP地址:8080/Web應用名”?



  • ××總結××?

      • 在瀏覽器端:“/”表示的是一臺WEB服務器,“http://機器IP:8080”
      • 在服務器端(請求轉發):“/”表示的是一個WEB服務器端的應用,“http://機器IP:8080/Web應用”
      • 在服務器端(重定向):“/”表示的是一個WEB服務器,“http://機器IP:8080”
      • 要在/jsp/index.jsp文件使用圖片,如何計算相對路徑? 經過Servlet,struts轉發后又如何計算相對路徑?????

        ?????

        目錄結構:

        ?

        ???

        ?

        ------------------------------------------------------------------------------

        ?

        第一種情況?:直接訪問JSP文件

        URL是?http://localhost/Context path/jsp/index.jsp

        ?

        要在index.jsp引用go.gif文件:

        1、使用決對路徑

        <img src='<%=request.getContextPath() %>/images/go.gif'/>

        瀏覽器尋找方式: 域名+/Context path/images/go.gif?? ,可找到。

        ?

        ??

        2、使用相對路徑

        <img src='../images/go.gif'/>

        瀏覽器尋找方式:通過地址欄分析,index.jsp所在目錄(jsp)的上一層目錄(WebRoot)下的images/go.gif文件?。

        ?

        ?

        3、使用base href

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

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

        ?

        ?

        ?<img src='images/go.gif'/>

        瀏覽器尋找方式: basePath的值http://localhost/Context?path/再加上images/go.gif,可找到。

        ?

        ?

        ------------------------------------------------------------------------------


        第二種情況: servlet轉發到jsp

        ?

        1、使用相對路徑?

        URL是http://localhost/Context path/servlet_2???(轉發到/jsp/index.jsp)

        ?

        錯誤:

        根據/jsp/index.jsp路徑計算,得到?<img src='../images/go.gif'/>

        ?

        ?

        正確:

        <img src='images/go.gif'/>

        ?

        原因:

        index.jsp是保存在服務器端的/jsp/index.jsp目錄下面,但通過轉發后瀏覽器并不知道/jsp/目錄的存在,因為地址欄中沒有體現出來。所以服務器端/jsp/目錄并不會對相對路徑產生影響

        瀏覽器尋找方式:通過地址欄分析http://localhost/Context path/servlet_2?,相對于servlet_2所在目錄(/)下面找到images/go.gif文件

        ?

        ?

        2、使用相對路徑

        URL是http://localhost/Context path/servlet/ser/ser/servlet_1 (轉發到/jsp/index.jsp)

        ?

        “/servlet/ser/ser/servlet_1 是在web.xml文件配置的

        ?

        錯誤:

        根據/jsp/index.jsp路徑計算,得到 <img src='../images/go.gif'/>

        ?

        正確:?

        <img src='../../../images/go.gif'/>

        ?

        原因:

        index.jsp是保存在服務器端的/jsp/index.jsp目錄下面,但通過轉發后瀏覽器并不知道/jsp/目錄的存在,因為地址欄中沒有體現出來。所以服務器端/jsp/目錄并不會對相對路徑產生影響

        瀏覽器尋找方式:通過地址欄分析http://localhost/Context path/servlet/ser/ser/servlet_1,相對于servlet_1所在目錄(ser)的上一層目錄的上一層目錄的上一層目錄(/)下的images/go.gif文件

        ?

        ?

        ?

        ?

        3、使用決對路徑

        <img src='<%=request.getContextPath() %>/images/go.gif'/>

        ?

        ?

        ------------------------------------------------------------------------------

        ?

        總結:相對路徑是由瀏覽器通過地址欄分析出來的,與服務器端文件的存放路徑沒有關系,由其是使用Servlet,struts轉發到某jsp文件后,某jsp在服務器端存放的位置是/a/b/c/d/f/g.jsp , 但經過Servlet,struts轉發后,瀏覽器的地址欄可不一定是/a/b/c/d/f/這樣的層次。所以相對路徑的計算以瀏覽器地址欄為準。原創地址:http://elf8848.iteye.com/

        ?

        ?

        ?

        struts2中可以使用命名空間,來保證瀏覽器地址欄中的目錄層次與服務器端目錄層次的一致性,這樣程序員通過服務器端的目錄層次計算相對路徑,在瀏覽器中也是正常的。

    轉載于:https://www.cnblogs.com/aijindi/p/4671004.html

    總結

    以上是生活随笔為你收集整理的jsp的相对路径问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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