JSP中的相對路徑和絕對路徑

來源:互聯網
上載者:User

1.首先明確兩個概念:

 

伺服器路徑:形如:http://192.168.0.1/的路徑

Web應用路徑:形如:http://192.168.0.1/yourwebapp的路徑

 

2.關於相對路徑與絕對路徑的描述:

 

 Servlet中,"/"代表Web應用的跟目錄。和實體路徑的相對錶示。例如:"./" 代表目前的目錄, "../"代表上級目錄。這種類似的表示,也是屬於相對路徑。這與linux中路徑的表述方法一致! 

 

3.關於JSP/Servlet中的相對路徑和絕對路徑。

 

3.1伺服器端的地址

 

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

其用到的地方有:
forward:servlet中的request.getRequestDispatcher(address);這個address是在伺服器端解析的,所以,你要forward到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");%>

 

3.2 用戶端的地址

 

所有的html頁面中的相對位址都是相對於伺服器根目錄(http://192.168.0.1/)的,而不是(跟目錄下的該Web應用的目錄) http://192.168.0.1/webapp/的。 Html中的form表單的action屬性的地址應該是相對於伺服器根目錄(http://192.168.0.1/)的,所以,如果提交到a.jsp 為:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()% >"/user/a.jsp;
提交到servlet為actiom="/webapp/handleservlet" Javascript也是在用戶端解析的,所以其相對路徑和form表單一樣。

 

因此,一般情況下,在JSP/HTML頁面等引用的CSS,Javascript.Action等屬性前面最好都加上
<%=request.getContextPath()%>,以確保所引用的檔案都屬於Web應用中的目錄。另外,應該盡量避免使用類似".","./","../../"等類似的相對該檔案位置的相對路徑,這樣當檔案移動時,很容易出問題。

 

簡單地說:

 

 

所有的路徑,都是向伺服器請求資源。不同之外在於,這個路徑是在伺服器端還用戶端解析!

 

 

如果你要寫下的這個路徑是要在伺服器端解析的話,那麼這個路徑的Root應該是像http: //192.168.0.1/webapp/這種形式的,即以webapp的路徑為根路徑。比如在OOBBS系統(web應用的名字是:oobbs)的Struts2配製中:

        <action name="getForumById" class="forumAction" method="getForumById">
            <result name="input">/</result>
            <result name="success">/site/forumList.jsp</result>
        </action>

上面的路徑就是:/site/forumList.jsp而不是/oobbs/site/forumList.jsp

 

 

 

而如果我們的寫下的這個路徑如果是在Clinet端來解析的,那麼路徑的root就變成了http: //192.168.0.1/,即以伺服器的路徑為根路徑。此時,如果你想請求背景某些資源,如jsp,action,那麼必須要從webapp開始,寫你的路徑!

比如:

我們登陸頁面中的Form:

<form action="/oobbs/site/j_spring_security_check" method="post"> 

這個路徑必須是以/oobbs開頭的!

 

 

 

4.關於<c:url>

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.