我的一个DAO类使用了相对路径来读取一个xml文件:
file = new File("Resources/DailyChallenge/question.xml");
项目的结构:
打成war包并发布到tomcat服务器之后,运行tomcat自动生成的项目文件夹的目录:
按理来说,代码中使用的相对路径应该是正确的,前提是根目录为项目文件夹springMVC_war。但是,运行tomcat时报错:
java.io.FileNotFoundException: F:\tomcat\tomcat9\bin\Resources\DailyChallenge\question.xml (系统找不到指定的路径。)
看来,tomcat认为根目录是startup文件所在的bin目录,在初始化DAO类时去bin目录下寻找Resources\DailyChallenge\question.xml文件,然而它本应该去webapps下的项目文件夹(springMVC_war)里寻找这个文件。
苦思了良久,突然想到是不是tomcat会默认starup文件所在的目录为根目录,如果把startup文件复制一份到webapps内的项目文件夹中,再去执行项目文件夹中的这个startup文件,tomcat就会认为根目录是我的项目文件夹了呢?
执行这个startup文件,发现tomcat可以正常启动了,xml文件被顺利读取。
总结:在我们把项目部署到tomcat服务器上后,先使用bin下的startup文件把war包展开,让tomcat自动在wabapps目录下生成我们的项目文件夹。如果项目当中使用了相对路径,则应该复制startup文件到项目文件夹下,使用这个startup文件来启动服务器,就可以解决相对路径的问题。
如果你有更好的解决办法,欢迎留言指教~