【问题标题】:Reading Web Application Resources阅读 Web 应用程序资源
【发布时间】:2011-07-07 16:52:41
【问题描述】:

背景

开发一个简单的 Web 应用程序(Eclipse + JBoss + Apache Tomcat)来生成 XML 文件。

问题

“业务领域”列表查询数据库,“列簇”列表使用选定的“业务领域”项查询数据库。这两个都是存储外部文本文件的唯一查询。

文件目前存储在以下位置:

  • WebContent/META-INF/business-areas.sql
  • WebContent/META-INF/column-clusters.sql

然后将这些用于播种PreparedStatements。

源代码

读取 SQL 代码的方法可能类似于:

  private String getSQL() {
    String result = "";

    try {
      BufferedReader br = open( "business-areas.sql" );
      String line = null;

      while( (line = br.readLine()) != null ) {
        result += line;
      }

      br.close();
    }
    catch( Exception e ) {
      e.printStackTrace();
    }

    return result;
  }

问题

我想知道:

  1. 存储此类资产以作为 Web 应用程序的一部分进行部署的最佳做法是什么? (也就是说,META-INF 是一个好位置,还是META-INF/resources 是首选?)
  2. 您推荐使用哪些 API 来读取文件内容? (即open方法怎么写才能找到要打开的文件?)

我已经有 JNDI 来建立数据库连接,但如果可能的话,我宁愿不使用 JNDI 来获取文件的句柄。

相关网站

谢谢!

【问题讨论】:

    标签: java web-applications jsf servlets jboss


    【解决方案1】:

    正确的位置(也是常见的做法)是将它们放在您的source 目录下,然后将其编译到WEB-INF/classes 目录中。我不确定您在回复@Dave 时所说的“类目录易变”是什么意思,但这是大多数(如果不是全部)Java Web 应用程序存储内容的方式。 WEB-INF/classes 不仅适用于 Java 类。通常会看到存储在source 目录下的日志记录属性文件(如 log4j)、Hibernate 和 Spring XML 文件,您可以使用以下方式安全地访问这些文件:-

    // in this case, the business-areas.sql is located right under "source/sql" directory
    InputStream is = getClass().getClassLoader().getResourceAsStream("sql/business-areas.sql");
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    

    关于使用 META-INF 的一些有用信息:What's the purpose of META-INF?

    【讨论】:

      【解决方案2】:

      我和 Dave Jarvis 一样担心将资源与 classeslib 混合,所以我做了一些摆弄,找到了这个解决方案:

      我将资源文件放在WEB-INF/resources 中。然后,为了加载它们,我使用了这个:

      getClass().getClassLoader().getResourceAsStream("../resources/main.xml");
      

      我不知道使用.. 是一个更干净的解决方案,但我的文件至少没有与类或罐子混合。

      【讨论】:

        【解决方案3】:

        我会将它们放在 WEB-INF/classes 中,或者将它们捆绑在您的 application.jar 中,该文件将进入 WEB-INF/lib 中。然后您可以按照herehere 的说明从类路径中加载它们

        更好的是,如果你使用 maven,最好的做法是将这些类型的文件放在 src/main/resources 中,然后 maven 会为你处理这些。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-28
          • 2011-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多