1.關(guān)于request.getRealPath的出錯(cuò)
問題:
String filename??=??request.getRealPath(filename)??//出了錯(cuò)
-------------------
錯(cuò)誤信息:
The method getRealPath(String) from the type ServletRequest is deprecated
解決:
資料來源:http://bbs.chinaunix.net/viewthread.php?tid=383861
參看request.getRealPath的java doc:
Deprecated. As of Version 2.1 of the Java Servlet API, use ServletContext.getRealPath(java.lang.String) instead.
而在servlet中使用getServletContext.getRealPath()這個(gè)方法收到war 和non-war的影響,以及不同app server實(shí)現(xiàn)的影響,運(yùn)氣好的話,你常常會(huì)得到null,嘿嘿,比如你在weblogic上部署war文件,又調(diào)用這個(gè)方法..
推薦ServletContext.getResourceAsStream
參考資料:http://bbs.chinaunix.net/viewthread.php?tid=383861
2.關(guān)于serveletContext.getRealPath返回NULL和不同的app server返回不同的結(jié)果
resoure url:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=12968&start=0&tstart=0
問題:
我的應(yīng)用有幾個(gè)配置文本配置文件(是一些報(bào)表的模板),我放在WEB-INF下面的config目錄下,我有程序
中是這樣得到這個(gè)config的實(shí)際路徑的
? 先用 serveletContext.getRealPath得到根路徑,tomcat中比如是
c:\tomcat\webapp\test
? 然后我加上? "/WEB-INF/config/aa.config",這樣得到文件的path然后進(jìn)行讀入,
應(yīng)用在tomcat上跑是ok的,后來將war放到weblogic上,出錯(cuò),原因是:
在weblogic上用getRealPath得到的是像
? myserver\stage\_appsdir_test_war\test.war!\WEB-INF\config....
? 這樣的路徑,于是一直報(bào)FileNotFoundException
解決:
serveletContext.getRealPath
這個(gè)方法在不同的服務(wù)器上所獲得的實(shí)現(xiàn)是不一樣的
這種情況我也同樣遇到過
建議是通過classloader來獲得你配置的資源文件
context.getRealPath("/")可能返回了null,你可以輸入來看看,
對(duì)一個(gè)打包的應(yīng)用來說,是沒有RealPath的概念的,調(diào)用getRealPath只會(huì)簡單地返回null。其實(shí),也很
好理解,一個(gè)文件被打包入了.war文件,就不存在目錄結(jié)構(gòu)了(雖然包中仍然存在目錄結(jié)構(gòu),但這不等同
于文件系統(tǒng)中的目錄結(jié)構(gòu))。所以,對(duì)war包中的資源是無法得到RealPath的。這樣也就無從通過文件IO
進(jìn)行讀取了。
那么,如何讀取war包中的資源呢?答案是使用ServletContext.getResourceAsStream
("/WEB-INF/config/aa.config")方法。
原則:基本上就是盡量使用j2ee規(guī)范中的各層次classloader來獲取資源,而不是試圖去找文件的絕對(duì)路
徑
方法:調(diào)用this.getClass().getClassLoader().getResource("/").getPath(); 獲取到classes目錄的全
路徑
使用:在得到classes目錄的全路徑后再根據(jù)字符串的截取與拼裝達(dá)到你的要求即可。
樓上說的對(duì),WebLogic對(duì)WEB-INF目錄下的文件是有訪問控制的,最好不要放在這個(gè)目錄下。
最好不要放在WEB-INF目錄下。。
問題:
String filename??=??request.getRealPath(filename)??//出了錯(cuò)
-------------------
錯(cuò)誤信息:
The method getRealPath(String) from the type ServletRequest is deprecated
解決:
資料來源:http://bbs.chinaunix.net/viewthread.php?tid=383861
參看request.getRealPath的java doc:
Deprecated. As of Version 2.1 of the Java Servlet API, use ServletContext.getRealPath(java.lang.String) instead.
而在servlet中使用getServletContext.getRealPath()這個(gè)方法收到war 和non-war的影響,以及不同app server實(shí)現(xiàn)的影響,運(yùn)氣好的話,你常常會(huì)得到null,嘿嘿,比如你在weblogic上部署war文件,又調(diào)用這個(gè)方法..
推薦ServletContext.getResourceAsStream
參考資料:http://bbs.chinaunix.net/viewthread.php?tid=383861
2.關(guān)于serveletContext.getRealPath返回NULL和不同的app server返回不同的結(jié)果
resoure url:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=12968&start=0&tstart=0
問題:
我的應(yīng)用有幾個(gè)配置文本配置文件(是一些報(bào)表的模板),我放在WEB-INF下面的config目錄下,我有程序
中是這樣得到這個(gè)config的實(shí)際路徑的
? 先用 serveletContext.getRealPath得到根路徑,tomcat中比如是
c:\tomcat\webapp\test
? 然后我加上? "/WEB-INF/config/aa.config",這樣得到文件的path然后進(jìn)行讀入,
應(yīng)用在tomcat上跑是ok的,后來將war放到weblogic上,出錯(cuò),原因是:
在weblogic上用getRealPath得到的是像
? myserver\stage\_appsdir_test_war\test.war!\WEB-INF\config....
? 這樣的路徑,于是一直報(bào)FileNotFoundException
解決:
serveletContext.getRealPath
這個(gè)方法在不同的服務(wù)器上所獲得的實(shí)現(xiàn)是不一樣的
這種情況我也同樣遇到過
建議是通過classloader來獲得你配置的資源文件
context.getRealPath("/")可能返回了null,你可以輸入來看看,
對(duì)一個(gè)打包的應(yīng)用來說,是沒有RealPath的概念的,調(diào)用getRealPath只會(huì)簡單地返回null。其實(shí),也很
好理解,一個(gè)文件被打包入了.war文件,就不存在目錄結(jié)構(gòu)了(雖然包中仍然存在目錄結(jié)構(gòu),但這不等同
于文件系統(tǒng)中的目錄結(jié)構(gòu))。所以,對(duì)war包中的資源是無法得到RealPath的。這樣也就無從通過文件IO
進(jìn)行讀取了。
那么,如何讀取war包中的資源呢?答案是使用ServletContext.getResourceAsStream
("/WEB-INF/config/aa.config")方法。
原則:基本上就是盡量使用j2ee規(guī)范中的各層次classloader來獲取資源,而不是試圖去找文件的絕對(duì)路
徑
方法:調(diào)用this.getClass().getClassLoader().getResource("/").getPath(); 獲取到classes目錄的全
路徑
使用:在得到classes目錄的全路徑后再根據(jù)字符串的截取與拼裝達(dá)到你的要求即可。
樓上說的對(duì),WebLogic對(duì)WEB-INF目錄下的文件是有訪問控制的,最好不要放在這個(gè)目錄下。
最好不要放在WEB-INF目錄下。。