2009-06-01 45 views

回答

1

如果你把文件中的“类”目录特定的webapps目录下(./webapps/{servlet}/classes),那么你可以从一个Java类中做这个访问:

Class.getResourceAsStream(<filename>); 

所以,如果你有在/ webapps /下myServlet/conf文件classes/conf.xml

Class.getResourceAsStream("conf.xml"); 
0

我并不确定这是“正确”的事情,但是在过去,我已经读取了配置文件路径的环境变量。

像这样的东西(你应该做的处理比这个例子,例外一个更好的工作......但你明白了吧):

public File getConfigurationFile() { 
    String envPath = System.getEnv("CONFIG_FILE"); // Use a better-named variable 
    if(envPath == null || envPath.equals("") { 
     throw new RuntimeException("CONFIG_FILE environment variable not set."); 
    } else { 
     File f = new File(envPath); 
     if(!f.exists()) { 
     throw new RuntimeException("CONFIG_FILE environment variable points to non-existent file"); 
     } else if(!f.isFile()) { 
     throw new RuntimeException("CONFIG_FILE environment variable points to non-file entity."); 
     } else if(!if.canRead()) { 
     throw new RuntimeException("CONFIG_FILE points to unreadable file."); 
     } else { 
     return f; 
     } 
    } 
} 
1

甘道夫提供了“正确的”答案。你可以安全地在任何地方使用。这就是你需要的一切。

只是谨慎。有些人认为,因为可以从WAR中读取数据,所以这意味着在WAR中写入数据也是可以的。从字面意义上讲,有时候这是真的。但不总是。它几乎从不安全。

我提到这个是因为我继承了一个完全做到这一点的webapp。在分解的WAR目录中存储整个文件目录树。首次软件升级,“Poof!”所有那些仔细上传的数据文件都没有了。

因此将WARs视为只读。如果您需要编写,请在应用程序服务器外指定一个目录。最好将它作为web.xml文件中的可配置参数,以便您可以使用JNDI查找它,并且可以覆盖它以用于测试目的,而无需修改源代码。

相关问题