在java中,如何将inputstream获取到tomcat中web inf文件夹下的配置文件?

在java中,如何将inputstream获取到tomcat中web inf文件夹下的配置文件?,java,web-applications,Java,Web Applications,我想获取java中tomcat中webinf文件夹下的配置文件的inputstream?我想将配置文件作为java中tomcat中webinf文件夹下的inputstream。我试过下面的代码 InputStream xwikicfgis = FIPSSOAuthServiceImpl.class.getClassLoader().getResourceAsStream("config.cfg"); 但它试图搜索web inf/classes文件夹下的文件,但我的文件直接位于web inf文件

我想获取java中tomcat中webinf文件夹下的配置文件的inputstream?我想将配置文件作为java中tomcat中webinf文件夹下的inputstream。我试过下面的代码

InputStream xwikicfgis = FIPSSOAuthServiceImpl.class.getClassLoader().getResourceAsStream("config.cfg");

但它试图搜索web inf/classes文件夹下的文件,但我的文件直接位于web inf文件夹下。我不知道如何将路径指向web inf而不是web inf/classes文件夹?

您可以使用servletConfig.getServletContext().getResourceAsStream(“/web-inf/filename”)从任何servlet获取它。

您可以使用servletConfig.getServletContext().getResourceAsStream(“/web-inf/filename”)获取它从任何servlet。

使用javax.servlet.ServletContext.getRealPath(字符串)

电话

String webappBase = getServletContext().getRealPath("/");
将指向webapp的文档库,这是WEB-INF的父级

之后你可以使用

InputStream is = new FileInputStream(webappBase + File.separator + "WEB-INF" + 
                                            File.separator + "config.cfg");

要获取输入流,请使用javax.servlet.ServletContext.getRealPath(字符串)

电话

String webappBase = getServletContext().getRealPath("/");
将指向webapp的文档库,这是WEB-INF的父级

之后你可以使用

InputStream is = new FileInputStream(webappBase + File.separator + "WEB-INF" + 
                                            File.separator + "config.cfg");
要获取输入流,您可以使用:

System.getenv("CATALINA_HOME") + "/webapps/your project name/foo.cfg
Tomcat在没有CATALINA_HOME的情况下无法工作,因此我们可以在没有任何其他配置文件或其他东西的情况下使用它,并且您不需要随身携带庞大的ServletContext。

或者您可以使用:

System.getenv("CATALINA_HOME") + "/webapps/your project name/foo.cfg

Tomcat在没有CATALINA_HOME的情况下无法工作,因此我们可以在没有任何额外配置文件或其他东西的情况下使用它,并且您不需要随身携带庞大的ServletContext。

getRealPath()如果在部署后未解压缩带有应用程序的存档(例如使用Weblogic作为)。getRealPath()如果部署后未解压缩应用程序存档(例如,使用Weblogic AS),则无法使用。如果需要将inputstream获取到位于uder web inf/classes文件夹中的任何java类文件,我应该给出完整路径(我的意思是包括com.myclass.Test之类的包)还是简单地给出Test之类的文件名。我的另一个理解是,它将首先在classes文件夹中搜索,如果找不到,然后在lib文件夹下搜索,对吗?您应该遵循classes目录中的目录结构(只需解包并查看内部)。注意:即使在窗户上也要使用“/”delimeter(不是反斜杠)。泰克斯艺术。最后一件事是这个servlet配置在servlet类中可用。如果我需要在其他非servlet的java类中执行该操作,您可以使用一些holder类,该类将在服务器启动时由servlet使用所需的数据初始化。如果我需要从web inf/classes文件夹中获取任何java类文件的inputstream,我应该给出完整的路径(我的意思是包括com.myclass.Test之类的包)还是只给出Test之类的文件名。我的另一个理解是,它将首先在classes文件夹中搜索,如果找不到,然后在lib文件夹下搜索,对吗?您应该遵循classes目录中的目录结构(只需解包并查看内部)。注意:即使在窗户上也要使用“/”delimeter(不是反斜杠)。泰克斯艺术。最后一件事是这个servlet配置在servlet类中可用。如果我需要在其他非servlet的java类中执行该操作,您可以使用一些holder类,该类将在服务器启动时由servlet使用所需的数据初始化。然后只要使用你需要的任何类的支架。