天天看點

JSP中 request.getRealPath("/xx/yy") 方法提示已經過時的替代方法

我們的JSP項目在上傳檔案時通常都需要擷取目錄在伺服器上的絕對路徑,request.getRealPath()方法顯示已經過時,但是還是有替代方法的。

1

2

3

4

<code>HttpSession session = request.getSession(</code><code>true</code><code>);  </code><code>//擷取session</code>

<code>//              String path = request.getRealPath("/data/userfile/image");  //此方法已經過時</code>

<code>                </code><code>String path = session.getServletContext().getRealPath(</code><code>"/data/userfile/image"</code><code>);  </code><code>//檔案儲存路徑</code>

在servlet或者struts中還可以這樣寫:

<code>this</code><code>.getServletContext().getRealPath(</code><code>"/data/userfile/image"</code><code>);</code>

<code>this</code><code>.getServlet().getServletContext().getRealPath(</code><code>"/data/userfile/image"</code><code>);</code>

以下介紹摘錄至:http://blog.sina.com.cn/s/blog_6dbf810d0100romt.html

相關介紹:

    在目前最新的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、上述方法可傳回項目的完整路徑,包括盤符、項目名等。  

本文轉自 pangfc 51CTO部落格,原文連結:http://blog.51cto.com/983836259/1694397,如需轉載請自行聯系原作者