Java / Tomcat:ServletContext& getResourceAsStream问题

时间:2012-08-22 21:21:23

标签: java tomcat servlets web-inf

我正在尝试从Tomcat Web应用程序访问conf文件(位于WEB-INF文件夹中)。目前,我将文件的位置硬编码为String。但是,当tomcat / webapps文件夹与我的硬编码String指示的位置不同时,这不起作用。我已经在线查看了,似乎使用getResourceAsStream ()方法正是我正在寻找的,但我很难让它工作。当我调用getServletContext ()方法时,我的应用程序不喜欢它。任何人都可以帮助我吗?

编辑:相关的代码块

BufferedReader myReader = new BufferedReader (new InputStreamReader (getServletContext ().getResourceAsStream ("/WEB-INF/conf.txt")));

4 个答案:

答案 0 :(得分:2)

为了解决这个问题,我在WEB-INF(path / to / app / WEB-INF / classes / mypackage /)下创建了两个文件夹,然后将我的文件放在这个文件夹中。然后,从我的POJO调用this.getClass.getResourceAsStream ("<filename>")打开一个流。要获取一个String,它是我执行this.getClass.getResource ("<filename>").toString ().substring (5)文件的完整绝对路径名。

答案 1 :(得分:1)

如果您尝试从Tomcat中的WEB-INF目录加载文件,请使用以下代码:

例如,对于WEB-INF / config / config.xml中的文件

ServletContext context = ....//get servlet context
InputStream is = context.getResourceAsStream("/WEB-INF/config/config.xml");

答案 2 :(得分:0)

如果您的配置文件位于/WEB-INF/config.xml,则可以使用“../config.xml”而不是完整路径从servlet访问它。这是有效的,因为编译的应用程序类通常位于/ WEB-INF / classes中。

答案 3 :(得分:0)

以下代码为我工作。我将config文件保存在WEB-INF/

web.xml代码段:

<servlet>
    <servlet-name>wizardcontroller</servlet-name>
    <servlet-class>com.sg.poc.wizard.controller.CustomerWizardController</servlet-class>
    <init-param>
        <param-name>plm-config</param-name>
        <param-value>plm-config.xml</param-value>
    </init-param>
</servlet>

Servlet代码段:

String configfile = config.getInitParameter("plm-config") ;
InputStream is = config.getServletContext().getResourceAsStream("/WEB-INF/"+configfile);
System.out.println("Resource Stream is : "+is);