使用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 阅读(2095)
评论(2) 编辑 收藏