报错信息如下图所示,Web应用后台在读取配置文件的时候,系统找不到指定的路径。
这是Java Web项目的目录结构:
这是报错部分的代码:
static {
try {
Properties prop = new Properties();
//读取配置文件
InputStream is = new InputStream("src/main/resources/db.properties");
//加载配置文件
prop.load(is);
driver = prop.getProperty("driver");
url = prop.getProperty("url");
user = prop.getProperty("user");
password = prop.getProperty("password");
} catch (Exception e) {
e.printStackTrace();
}
}
做出的尝试:
报错原因:
由上诉第二点应该可以看出来了,其实还是路径的问题,当时做出了一个大胆的猜想:Java项目本地直接运行(Java Application)的根目录和Java Web项目在服务器上运行(Run on Service)的根目录是不同的!
在网上找了相关资料后,证实了我的猜想:
PS:至于为什么是这样,可以去了解一下.classpath文件,它用于记录项目编译环境的所有信息,包括:源文件路径、编译后class文件存放路径、依赖的jar包路径、运行的容器信息、依赖的外部project等信息。
知道了出错原因是在路径问题上,那我们就把手动输路径改为通过Class获取资源路径。
获取路径的方法如下,如果给getResource()传入的是"",返回的是JDBCUtils类的路径;如果
传入的是"/",返回的是target/classes或WEB_INF/classes。
String url = JDBCUtils.class.getResource("/").getPath();
由上面的截图可以看到,配置文件db.properties是放在/class下的,所以要找路径的时候传入"/db.properties"参数即可。
InputStream is = new FileInputStream(JDBCUtils.class.getResource("/db.properties").getPath());
//等价于
InputStream is = JDBCUtils.class.getResourceAsStream("/db.properties");
用Navicat打开数据表可以发现,注册信息已经成功插入表中!
一个合格的程序员,应该要善于发现问题。٩(๑>₃<)۶