1. 程式人生 > >JSP中的相對路徑和絕對路徑

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

               

1.首先明確兩個概念:

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>