ServletContext.getRealPath() 使用方法及注意事項

ServletContext.getRealPath() 是從當前servlet 在tomcat 中的存放文件夾開始計算起的


比如,有個servlet 叫 UploadServlet,它部署在tomcat 下面以後的絕對路徑如下:

"C:\Program Files\apache-tomcat-8.0.3\webapps\UploadServlet"


那麼,

ServletContext.getRealPath("/") 返回 "C:\Program Files\apache-tomcat-8.0.3\webapps\UploadServlet"

ServletContext.getRealPath("/attachment") 返回 "C:\Program Files\apache-tomcat-8.0.3\webapps\UploadServlet\attachment"

ServletContext.getRealPath("attachment") 會導致NullPointerException


結論就是:

在使用ServletContext.getRealPath() 時,傳入的參數是從 當前servlet 部署在tomcat中的文件夾算起的相對路徑,要以"/" 開頭,否則會找不到路徑,導致NullPointerException


解決問題過程中,發現這位大哥做了類似的記錄 ServletContext .getRealPath,但其觀點,不敢苟同。自己觀察到的結果是:

ServletContext.getRealPath("/") 返回 "C:\Program Files\apache-tomcat-8.0.3\webapps\UploadServlet"

ServletContext.getRealPath("/") + "xxx" 返回 "C:\Program Files\apache-tomcat-8.0.3\webapps\UploadServletxxx"

ServletContext.getRealPath("/") + "/xxx" 返回 "C:\Program Files\apache-tomcat-8.0.3\webapps\UploadServlet\xxx"

即,getRealPath() 返回的字符串結尾不帶"/"


注意,Windows下,在Eclipse debug過程中,看到的getRealPath() 返回的字符串其實是長這樣子的:

"C:\\Program Files\\apache-tomcat-8.0.3\\webapps\\UploadServlet\\attachment"

"\\"中的第一個"\"是轉義符,你懂的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章