繁体   English   中英

从不同Tomcat上的Tomcat Web应用程序读取文件

[英]Read a file from Tomcat webapps on different Tomcats

考虑以下几点:我得到了一个csv文件。 该文件存储在tomcat wepapps目录中。 该目录的路径取决于所使用的计算机。 有些用户为其Tomcat使用不同的位置并使用不同的名称。 我要实现以下目标。

通过Spring,我执行了以下操作:我执行了一个操作,该操作将一些数据从csv导入数据库。

<bean id="setCsvPathAction" class="custom.action.importcsv.SetCsvPathAction">
   <property name="csvPath" value="C:/temp/test.csv"/>
</bean>

这对我来说很好。 为了使该路径对其他人更可配置,我得到了一个system.properties文件。 使用此文件,您可以轻松地覆盖属性:

setCsvPathAction.csvPath=#{tomcat_home}/webapps/test.csv

那就是我想要的。 我希望该路径位于Tomcat webapps目录中。 上面的方法不起作用。 你有什么提示如何实现这一目标吗?

大多数使用tomcat的人都会设置CATALINA_HOME环境变量。 您可以查询此环境变量并检索值。

String tomcat_home = System.getenv("CATALINA_HOME");
if(tomcat_home){
    setCsvPathAction.csvPath=tomcat_home+"/webapps/test.csv"
}

注意:不能保证在每个使用tomcat的系统上都设置此环境变量

有关getenv()的更多信息-http: //docs.oracle.com/javase/7/docs/api/java/lang/System.html#getenv%28%29

如果要放在web apps文件夹中,则也可以使用类加载器来获取本地路径,因此您无需进行任何配置。

someObject.getClass()。getClassLoader()。getResourceAsStream(“ path / refferenced / to / app / root /”);

.properties文件的解决方案是:$ {catalina.home}接下来,我需要一个独立于系统环境的FileInputStream。 我尝试了以下方法:

public class environmentTest {

    public static void main(final String[] args) {
        System.out.println(System.getenv("CATALINA_BASE"));
    }

}

null在控制台上打印。

Person类包含jpg文件的名称。 该文件位于webapps文件夹中。 我希望路径独立于所使用的计算机。 我尝试了以下方法:

File file = new File(System.getenv("CATALINA_HOME") + "/webapps/" + person.getPhoto());
FileInputStream fileInputStream = new FileInputStream(file);

遗憾的是,这是行不通的,因为正如unekwu所说,此环境变量未在所有系统上设置。 您知道在这种情况下我能做什么吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM