使用JSF編寫web程序的時候,JavaBean無法直接通過相對路徑來訪問文件。經過一天的研究主要發現兩類解決方案,一是,通過FacesContext,二是,通過ClassLoader。
下面通過實例來說明。
首先是介紹web程序目錄的大致結構:
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)號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文件的系統路徑,xmlfile為相對路徑
采用這個方法存在一些隱患:比方說對一個打包的應用來說,是沒有RealPath的概念的,調用getRealPath只會簡單地返回null。
2. getResourceAsStream():
FacesContext context =
FacesContext.getCurrentInstance();
InputStream xmlStream =
context.getExternalContext()
.getResourceAsStream(xmlfile);
用于只讀的形式。
二:ClassLoader
獲得(1)號path-config.xml文件信息,
代碼如下:
String partPath
=”/XmlData/path-config.xml”;
String
fullPath=this.getClass().getClassLoader().getResource(partPath).getPath();
//使用的時候還是存在一些問題,無法正常使用,暫時沒有發現解決的辦法
InputStream xmlStream=this.getClass().getClassLoader().getResourceAsStream(partPath);
//用于只讀的形式下,通過測試能夠正常的使用
posted on 2008-02-29 17:36
zhan 閱讀(2100)
評論(2) 編輯 收藏