使用JSF編寫web程序的時(shí)候,JavaBean無(wú)法直接通過(guò)相對(duì)路徑來(lái)訪問(wèn)文件。經(jīng)過(guò)一天的研究主要發(fā)現(xiàn)兩類解決方案,一是,通過(guò)FacesContext,二是,通過(guò)ClassLoader。
下面通過(guò)實(shí)例來(lái)說(shuō)明。
首先是介紹web程序目錄的大致結(jié)構(gòu):
D:"......"Tomcat
6.0"webapps"imatrixb ------> 程序的更目錄
--META-INF
--WEB-INF
---------------classess
---------------------------cn
----------------------------------com
--------------------------------------------…… ----------->class
文件
---------------------------XmlData
---------------------------------path-config.xml (1)
--------------- path-config.xml (2)
…….
Index.jsp
一:FacesContext
獲得(2)號(hào)path-config.xml文件信息,
代碼如下:
String partPath=”/
WEB-INF/ path-config.xml”;
1. getRealPath():
FacesContext
context = FacesContext.getCurrentInstance();
HttpServletRequest rst = (HttpServletRequest)context.getExternalContext().getRequest();
String fullPath=rst.getRealPath(xmlfile); // 獲得xml文件的系統(tǒng)路徑,xmlfile為相對(duì)路徑
采用這個(gè)方法存在一些隱患:比方說(shuō)對(duì)一個(gè)打包的應(yīng)用來(lái)說(shuō),是沒(méi)有RealPath的概念的,調(diào)用getRealPath只會(huì)簡(jiǎn)單地返回null。
2. getResourceAsStream():
FacesContext context =
FacesContext.getCurrentInstance();
InputStream xmlStream =
context.getExternalContext()
.getResourceAsStream(xmlfile);
用于只讀的形式。
二:ClassLoader
獲得(1)號(hào)path-config.xml文件信息,
代碼如下:
String partPath
=”/XmlData/path-config.xml”;
String
fullPath=this.getClass().getClassLoader().getResource(partPath).getPath();
//使用的時(shí)候還是存在一些問(wèn)題,無(wú)法正常使用,暫時(shí)沒(méi)有發(fā)現(xiàn)解決的辦法
InputStream xmlStream=this.getClass().getClassLoader().getResourceAsStream(partPath);
//用于只讀的形式下,通過(guò)測(cè)試能夠正常的使用
posted on 2008-02-29 17:36
zhan 閱讀(2103)
評(píng)論(2) 編輯 收藏