从非servlet类(从外部jar)引用WEB-INF \中的文件

时间:2015-10-13 08:56:10

标签: java tomcat java-ee servlets

我有一个项目CouponSystem,它有一个config / cs.properties文件。 该项目导出为cs.jar并添加到另一个导出web-app csee.war

的项目中

当CouponSystem运行时(作为java应用程序),它会加载正确读取config / cs.properties的Utils类。

当csee在服务器(tomcat7)上运行时,我找不到该文件。在创建了一些方法来了解tomcat查找该文件的位置之后,我意识到它在tomcat / bin目录中查找 - 所以如果我把文件放在tomcat / bin / cs.properties中:一切正常。 (不是解决方案,只是为了解问题)

我的问题是 - 将cs.properties放在web-app环境中的正确方法是什么,以及如何告诉非servlet类(Utils)找到它?

谢谢。

enter image description here

public class Utils {

    public static final String CONFIG_FILE = "cs.properties";
    //public static final String CONFIG_FILE = "WEB-INF/config/cs.properties";

    // builds a hashmap from properties file
    public static void loadSystemParameters() {
        // this code only to know "the default current dir"
        File f = new File("."); // current directory
        File[] files = f.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.print("directory:");
            } else {
                System.out.print("     file:");
            }
            try {
                System.out.println(file.getCanonicalPath());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }




        Utils.logMessage(new Utils(), Severity.DEBUG, "loadSystemParameters() invoked");
        // construct a List<Customer> to return the data
        sysParams = new HashMap<String, String>();
        Properties properties = new Properties();
        try {
            properties.load(new FileReader(CONFIG_FILE));
            for(String propName : properties.stringPropertyNames()){
                sysParams.put(propName, properties.getProperty(propName));
            }
            Utils.logMessage(new Utils(), Severity.DEBUG, "properties from file loaded to a hashmap");
        } catch (IOException e) {
            Utils.logMessage(new Utils(), Severity.ERROR, "cannot load properties file ! exiting.");
            e.printStackTrace();
            //System.exit(0);
        }
    }
}

2 个答案:

答案 0 :(得分:0)

最简单的方法是将文件放在WEB-INF/classes中,然后从类路径加载它:

Properties p = new Properties();
// load the file at WEB-INF/class/cs.properties
p.load(Utils.class.getResourceAsStream('/cs.properties')); 

答案 1 :(得分:0)

实现的一种方法是参数化包含属性文件的目录路径。假设,你的名字是CONFIG_HOME。您可以使用JVM参数将CONFIG_HOME设置为System属性。然后在您的代码中,您可以获得CONFIG_HOME路径:

File f = new File(System.getProperty("CONFIF_HOME")); // your config directory

这种方法可以让您灵活地不在战争中打包属性文件。