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頁面中的相對地址都是相對於伺服器根目錄(
因此,一般情況下,在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>