1.基本概念的理解
絕對路徑絕對路徑就是你的主頁上的文件或目錄在硬盤上真正的路徑(URL和物理路徑)例如
C:xyzest.txt表明了test.txt文件的絕對路徑。http://www.sun.com/index.htm也表明了一個URL絕對路徑。
相對路徑相對與某個基準目錄的路徑。包含Web的相對路徑HTML中的相對目錄例如在
Servlet中"/"表明Web應用的跟目錄。和物理路徑的相對錶示。例如"./"表明當前目錄,"../"表明上級目錄。這種相似的表示也是屬於相對路徑。
另外關於URIURL,URN等內容請參考RFC相關文檔標準。
RFC2396:UniformResourceIdentifiers(URI):GenericSyntax,
(http://www.ietf.org/rfc/rfc2396.txt)
2.關於JSP/Servlet中的相對路徑和絕對路徑。
2.1服務器端的地址
服務器端的相對地址指的是相對於你的web應用的地址這個地址是在服務器端解析的不一樣於html和javascript中的相對地址他們是由客戶端瀏覽器解析的也就是說這時候在jsp和servlet中的相對地址應該是相對於你的web應用即相對於http://192.168.0.1/webapp/的。
其用到的地方有
forwardservlet中的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");%>
2.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應用中的目錄。另外應該儘可能避免使用相似".","./","../../"等相似的相對該文件位置的相對路徑這樣當文件移動時很容易出問題。
3.JSP/Servlet中得到當前應用的相對路徑和絕對路徑
3.1JSP中得到當前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getRequestURI()
文件的絕對路徑 :application.getRealPath(request.getRequestURI());
當前web應用的絕對路徑:application.getRealPath("/");
取得請求文件的上層目錄:newFile(application.getRealPath(request.getRequestURI())).getParent()
3.2Servlet中得到當前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getServletPath();
文件的絕對路徑:request.getSession().getServletContext().getRealPath
(request.getRequestURI())
當前web應用的絕對路徑:servletConfig.getServletContext().getRealPath("/");
(ServletContext對象得到幾種方式
javax.servlet.http.HttpSession.getServletContext()
javax.servlet.jsp.PageContext.getServletContext()
javax.servlet.ServletConfig.getServletContext()
)
4.java的Class中得到相對路徑絕對路徑的方法
4.1單獨的Java類中得到絕對路徑
根據java.io.File的Doc文擋可知:
默認狀況下newFile("/")表明的目錄爲System.getProperty("user.dir")。
一下程序得到執行類的當前路徑
javascript
packageorg.cheng.file;php
importjava.io.File;html
publicclassFileTest{java
publicstaticvoidmain(String[]args)throwsException{web
System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));瀏覽器
System.out.println(FileTest.class.getClassLoader().getResource(""));服務器
System.out.println(ClassLoader.getSystemResource(""));網絡
System.out.println(FileTest.class.getResource(""));app
System.out.println(FileTest.class.getResource("/"));webapp
//Class文件所在路徑
System.out.println(newFile("/").getAbsolutePath());
System.out.println(System.getProperty("user.dir"));
}
}