request.getRealPath()詳解


 

1、此方法已過時,現在可替換的實現方法有

request.getSession().getServletContext().getRealPath("/")

在Servlet 里用this.getServletContext().getRealPath("/");獲得絕對路徑。

struts里用this.getServlet().getServletContext().getRealPath("/")獲得絕對路徑。

 

相關介紹:

在目前最新的Java Servlet API 2.1版本中,不贊成使用request.getRealPath()這個方法,使用ServletContext.getRealPath(java.lang.String)代替它。

在Servlet 2.4文檔中對ServletContext.getRealPath(java.lang.String)是這樣描述的: 返回一個字符串,包含一個給定虛擬路徑的真實路徑,如果轉換錯誤,則返回null。例如,虛擬路徑“/index.html”不管在服務器文件系統上具有怎樣的真實路徑,使用“/index.html”總可以找到它。返回的真實路徑使用了相近於servlet容器(servlet container)所在計算機或操作系統的格式,包含了適當的路徑分隔符。如果servlet容器無法轉換則將返回null.

 

但是,ServletContext.getRealPath()的返回值經常返回不同的路徑。

例如:有2個文件

exper1.txt,位於 C:\Tomcat 6.0\webapps\ROOT,

exper2.txt,位於 C:\Tomcat 6.0\webapps,

在C:\Tomcat 6.0\webapps\ROOT寫一個.jsp文件:

ServletContext context = getServletContext();

context.getRealPath(“exper1.txt”)結果為C:\Tomcat 6.0\webapps\ROOT\exper1.txt;

context.getRealPath(“exper2.txt”)結果為C:\Tomcat 6.0\webapps\ROOT\exper2.txt;

context.getRealPath(“exper3.txt”)結果仍為C:\Tomcat 6.0\webapps\ROOT\exper3.txt 但是exper3這個文件是不存在的。這也就說明了getRealPath()這個方法是存在一定的問題的。

 

application.getRealPath()的用法和ServletContext.getRealPath()基本相同,當把前面例子中的context改為application,得到的結果也是相同的,它也存在着相同的問題

 

2、request對象位於javax.servlet.http.HttpServletRequest包中,但在java API中找不到

網上資料顯示在J2EE API或Tomcat API中可找到,暫無驗證,有興趣的朋友可以去試試

 

3、上述方法可返回項目的完整路徑,包括盤符、項目名等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM