Servlet中加载配置文件的方式(使用Properties)
这里我只测试了加载Properties的路径问题(且前提是配置文件是放在resources目录下的),其他类型的配置文件不展开赘述
方法1:使用类的加载器
在java中我们常用的加载Properties文件的方法为:使用当前类的加载器,获取资源流之后再new 一个Properties对象进行加载,所以在Servlet中我们也可以使用这样的方法进行加载配置文件。具体的在Servlet中的代码如下:
// 使用类的加载器获取资源文件,相对路径如下所示
ClassLoader loader = 当前类名.class.getClassLoader();
// 获取资源流
InputStream is = loader.getResourceAsStream("db.properties");
Properties pros = new Properties();
// 加载资源流
pros.load(is);
项目的文件目录结构如下,Maven是对规范要求较高,不按要求可能会出现一些问题。
这种方式是可以进行加载resources目录下的配置文件的,又例如,想加载resources目录下的test目录下的db.properties的话,路径仅需要替换为如下所示:
// 使用类的加载器获取资源文件,相对路径如下所示
ClassLoader loader = 当前类名.class.getClassLoader();
// 获取资源流
InputStream is = loader.getResourceAsStream("test/db.properties");
Properties pros = new Properties();
// 加载资源流
pros.load(is);
值得注意的是test目录前没有 /
方法2:使用ServletContext上下文
在Servlet中,可以通过 this.getServletContext() 方法来获得一个当前项目的上下文,这个上下文可以用于多个Servlet类之间的数据共享等操作,也可以通过 context.getResourceAsStream() 方法以流的形式加载配置文件,一个完整的Maven项目通过编译自动生成的 target目录结构 如下:
这个servlet-02-1.0-SNAPSHOT目录就是当前项目所在的目录,可以看到我们需要加载的配置文件是在 /WEB-INF/classes/db.properties这个位置的,所以具体的在Servlet中的获取配置文件的代码如下:
// 获取Serlet的上下文环境
ServletContext context = this.getServletContext();
// 获取资源流,context获取资源流的路径是相当于在servlet-02-1.0-SNAPSHOT目录
InputStream is = context.getResourceAsStream("/WEB-INF/classes/db.properties");
Properties pros = new Properties();
pros.load(is);
结论:在Servlet中获取配置文件的方式不同相对路径也不尽相同,所以要根据你的需要来选择加载配置文件的方式
希望我微不足道的见解可以帮到你~~