有一个web应用需要读入xml文件,用的是java.io.File(),参数一定要是绝对路径吗?
如果我想用相对路径可以吗?怎么可以获得应用的根目录?前面听一个高人说起相对路径是相对于被调用程序的根目录,我用的是tomcat,试了下把xml文件放在tomcat/bin下面是可以的,可是这样同样不能解决问题啊~~可以说更糟了!!那位高手知道这个问题啊,急~~
在线等
如果我想用相对路径可以吗?怎么可以获得应用的根目录?前面听一个高人说起相对路径是相对于被调用程序的根目录,我用的是tomcat,试了下把xml文件放在tomcat/bin下面是可以的,可是这样同样不能解决问题啊~~可以说更糟了!!那位高手知道这个问题啊,急~~
在线等
解决方案 »
- 请教一个SQL
- struts2 s:iterator 循环速度太慢
- 基于web人事管理系统
- 初学j2ee出现错误,请热心的朋友帮忙
- 新手测试struts出错,求助(急,在线等)
- 谁有crystal report application server 9.x的注册码?
- jsp中如何获取<select>标签中的值?
- 求jfreechart使用手册
- 如何将int型转换为String型?
- 用jdbcd调用数据库的问题:装了一个sql 2000 driver for jdbc,在jbuilt中可以成功调用数据,但在jsp中调用时出错。
- 在线等,马上给分:怎么用java在xml文件中增加这句话:<?xml-stylesheet type='text/xsl' href='/xsl/my.xsl'?>
- 如何访问相对路径的XML文件?
作为相对路径,不管tomcat的安装路径为何,
只要把应用放到它的应用目录下边,就可以了!
但是你如果用绝对路径,这将会很麻烦,对于不同的服务器,你都得
重新设置路径!
很不方便!
看一下。
不过有一种变通的方法:
public class FilesUtil{ private static String strSep = File.separator;
private static String webRoot="";
static{
String className = "org.apache.commons.dbcp.BasicDataSource";
String classNameUrl="/org/apache/commons/dbcp/BasicDataSource.class";
String temp=null;
int i = 0;
try {
Class.forName(className);
java.net.URL classUrl = FilesUtil.class
.getResource(classNameUrl);
temp = classUrl.getPath();
temp = URLDecoder.decode(temp);
//如果是windows则从第六个字符开始,否则从第五个字符开始
if ("Win".equalsIgnoreCase(System.getProperty("os.name").substring(
0, 3))) {
i = 6;
} else {
i = 5;
}
webRoot = temp.substring(i, temp.indexOf("WEB-INF") - 1);
} catch (Exception e) {
System.err.println("取得webRoot时出错:");
webRoot = "";
}
}
/**
* 取到目录为webRoot
*
* @return
*/
public static String getWebRoot(){
return webRoot;
}
}org.apache.commons.dbcp.BasicDataSource是一个dbcp.jar里的一个类
将这个jar放在web-inf/lib下就行了,当然你也可以换一个另外的jar到此目录下
例子:在比如你的应用程序放在c:/myweb/下面,其中一个BEAN要访问myweb下的一个文件a.txt,如果你用java.io.File(“/a.txt”)就错误的,这样访问的是c:/a.txt,但是在JSP、SERVLET中include“/a.txt”则是正确的。
使用相对路径的问题就是理解根目录“/”所在
而理解根目录“/”的关键在于你必须明确知道代码是在什么容器里面运行的
举例来说:java application在本地JVM运行,参照本地文件系统,它的“/”就是App程序的根目录servlet和jsp在WEB容器里面运行,参照服务器文件系统,“/”是服务器web根目录,这个根目录并不统一,比如tomcat默认webapps,resin默认doc等等,通过修改配置,可以指定到服务器任何路径下,不管指定到哪个物理路径,根目录“/”应该是war包所在目录java bean比较特殊,它们可能有双重标准,一般应该在web-inf/classes下找它的相对路径
out.println("URL of thisPage : "+ getServletContext().getResource("/images/logo.gif"));
%>
<%
out.println("URL of thisPage : "+ getServletContext().getResource("/WEB-INF/web.xml"));
%>
out.println("InputStream of thisPage : "+ getServletContext().getResourceAsStream("/images/logo.gif"));
%>
<%
out.println("InputStream of thisPage : "+ getServletContext().getResourceAsStream("/WEB-INF/web.xml"));
%>
如果你用ibatis
这个包里com.ibatis.common.resources.Resources;提供Resources.getResourceAsReader静态方法:String resource="文件的相对路径";
Reader reader;
reader=Resources.getResourceAsReader(resource);