【问题标题】:Java/Tomcat: ServletContext & getResourceAsStream ProblemsJava/Tomcat:ServletContext 和 getResourceAsStream 问题
【发布时间】:2012-08-18 09:00:56
【问题描述】:

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

编辑:相关代码块

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

【问题讨论】:

  • 1.) 不喜欢 =?什么错误。 2.) 你的代码是什么样子的?
  • 编译器说...
  • 不贴代码我们真的帮不了你
  • BufferedReader myReader = new BufferedReader (new InputStreamReader (getServletContext ().getResourceAsStream ("/WEB-INF/conf.txt"))); >> "getServletContext() 方法未定义类型..."
  • 仍然很难用这个。我认为问题的一部分是我试图从运行在 Tomcat servlet 上的 POJO 访问这些信息。我可以从运行在我的 Tomcat servlet 上的 MBean 获取 servletContext 吗?

标签: java tomcat servlets web-inf


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 关于如何获取 servlet 上下文的任何建议?我认为这是我的问题的症结所在。
    • 此外,Eclipse(我正在使用的 IDE)甚至无法识别 ServletContext 类型的对象。 ServletContext thisContext; >> “ServletContext 无法解析为一种类型”,建议似乎合适。
    • 确保你的类扩展了 GenericServlet(例如 HttpServlet),这样你就有了getServletContext() 方法可用。还要确保 Apache Tomcat 库位于项目在 Eclipse 中的构建路径中;如果没有,请右键单击您的项目 -> 构建路径 -> 添加库 -> 服务器运行时 -> Apache Tomcat。
    • request.getServletContext,先生
    【解决方案3】:

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

    【讨论】:

    • 感谢您的回复。我真的希望这会起作用,因为它是最简单的解决方案,但它导致了以下错误,“java.io.FileNotFoundException:../config.txt(没有这样的文件或目录)”
    【解决方案4】:

    以下代码对我有用。我将config 文件保存在WEB-INF/

    web.xml 代码 sn-p:

    <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 代码 sn-p:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2012-10-05
      • 2018-05-16
      • 2016-02-10
      • 1970-01-01
      相关资源
      最近更新 更多