寫了好多代碼,可是一直對路徑(java或jsp)有很大的疑惑,今天一邊查閱資料一邊學習一邊總結一些:
1.相對路徑和絕對路徑的差別:
絕對路徑:就是檔案在本地硬碟上的真正路徑即URL和實體路徑;
相對路徑:相對與某個基準目錄的路徑(一般針對web目錄而言,包含Web的相對路徑(HTML中的相對目錄);
servlet中,"/"表示web的根目錄,"./"表示檔案所在的目前目錄,"../"表示目前目錄的上一級目錄;
在網絡中,以http開頭的連結都是絕對路徑,絕對路徑就是你的首頁上的檔案或目錄在硬碟上真正的路徑,絕對路徑一般在CGI程式的路徑配置中經常用到,而在制作網頁中實際很少用到。
2.伺服器端的位址
伺服器端的相對位址指的是相對于你的web應用的位址,這個位址是在伺服器端解析的,不同于html和javascript中的相對位址,它們是由用戶端浏覽器解析的。
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.用戶端的位址
所有的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應用中的目錄。另外,應該盡量避免使用類似".","./","../../"等類似的相對該檔案位置的相對路徑,這樣當檔案移動時,很容易出問題。
4. JSP/Servlet中獲得目前應用的相對路徑和絕對路徑
4.1 JSP中獲得目前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑:request.getRequestURI()
檔案的絕對路徑 :application.getRealPath(request.getRequestURI());
目前web應用的絕對路徑 :application.getRealPath("/");
取得請求檔案的上層目錄:new File(application.getRealPath(request.getRequestURI())).getParent()
4.2 Servlet中獲得目前應用的相對路徑和絕對路徑
根目錄所對應的絕對路徑: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()
)
5.java 的Class中獲得相對路徑,絕對路徑的方法
5.1單獨的Java類中獲得絕對路徑
根據java.io.File的Doc文擋,可知:
預設情況下new File("/")代表的目錄為:System.getProperty("user.dir")。
6.當用到:System.getProperty("user.dir");擷取目前的工作路徑;當你在main函數中調用此方法時得到是你的工作空間如d:/workplace/項目名 這個路徑 ;如果是頁面中通過控件來調用這個方法則傳回的TOMCAT的路徑
在檔案操作中,不用/或者\最好,推薦使用File.separator