Tomcat环境下,在一个Service层中读取文件使用"/projectName/userfiles/image/*.jpg“的相对路径,读取的不是当前应用程序的当前路径,而是直接调到/home/tomcat-6.0.18/bin下,不解,虽然写绝对路径不影响程序现在的运行,但是程序却没有办法移植了!!
查了一下原因
war包只是部署到服务器的一个子过程,整个Tomcat的WEB应用只有一个入口那就是main的入口,那么启动Tomcat的main类的路径就是所谓的当前可执行路径也就是/home/tomcat-6.0.18/bin下,如果想把配置放到war下,那么就要考虑WAR/WEB-INF/classes/和WAR/WEB-INF/lib,Tomcat针对你的war应用启动了对应的ClassLoad,可以合理的把上述路径作为classpath路径,当然也包括Tomcat_home/common/lib和Tomcat_home/common/classes,所以你把配置文件放到WAR/WEB-INF/classes/下,或者打到一个jar包的根下放到WAR/WEB-INF/lib中,使用"/projectName/userfiles/image/*.jpg"的方式,就会直接以流的形式读出!这个比较适合读取配置文件的情况!
如果读取的文件是不固定的可以在action处通过
查了一下原因
war包只是部署到服务器的一个子过程,整个Tomcat的WEB应用只有一个入口那就是main的入口,那么启动Tomcat的main类的路径就是所谓的当前可执行路径也就是/home/tomcat-6.0.18/bin下,如果想把配置放到war下,那么就要考虑WAR/WEB-INF/classes/和WAR/WEB-INF/lib,Tomcat针对你的war应用启动了对应的ClassLoad,可以合理的把上述路径作为classpath路径,当然也包括Tomcat_home/common/lib和Tomcat_home/common/classes,所以你把配置文件放到WAR/WEB-INF/classes/下,或者打到一个jar包的根下放到WAR/WEB-INF/lib中,使用"/projectName/userfiles/image/*.jpg"的方式,就会直接以流的形式读出!这个比较适合读取配置文件的情况!
如果读取的文件是不固定的可以在action处通过
ServletContext sc = getServletContext();
String path=sc.getRealPath("相对路径");
File file=new File(path);//获取的是正确的绝对路径了