【IT168技术文档】
使用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); //用于只读的形式下,通过测试能够正常的使用