Java 阅读Web应用程序资源 背景

Java 阅读Web应用程序资源 背景,java,web-applications,jsf,servlets,jboss,Java,Web Applications,Jsf,Servlets,Jboss,开发一个简单的web应用程序(Eclipse+JBoss+ApacheTomcat)来生成XML文件 问题 “Business Area”列表查询数据库,“Column Cluster”列表使用选定的“Business Area”项查询数据库。这两种查询都是存储在外部文本文件中的唯一查询 文件当前存储在以下位置: WebContent/META-INF/business-areas.sql WebContent/META-INF/column-clusters.sql 然后,它们被用于种子P

开发一个简单的web应用程序(Eclipse+JBoss+ApacheTomcat)来生成XML文件

问题 “Business Area”列表查询数据库,“Column Cluster”列表使用选定的“Business Area”项查询数据库。这两种查询都是存储在外部文本文件中的唯一查询

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

  • WebContent/META-INF/business-areas.sql
  • WebContent/META-INF/column-clusters.sql
然后,它们被用于种子
PreparedStatement
s

源代码 读取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;
  }
问题 我想知道:

  • 存储这些资产以作为web应用程序的一部分进行部署的最佳做法是什么?(也就是说,
    META-INF
    是一个好位置,还是
    META-INF/resources
    首选?)
  • 您建议使用哪些API来读取文件内容?(也就是说,如何编写
    open
    方法,以便找到要打开的文件?)
  • 我已经准备好了JNDI来建立数据库连接,但是如果可能的话,我宁愿不使用JNDI来获取文件的句柄

    相关网站

    谢谢大家!

    我会将它们放在WEB-INF/classes中,或者将它们捆绑在application.jar中,application.jar将放在WEB-INF/lib中。然后,您可以从类路径加载它们,如下所述和

    更好的是,如果您使用maven,最佳实践是将这些类型的文件放在src/main/resources中,然后maven将为您处理这些文件

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

    // 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使用的有用信息:

    我和Dave Jarvis一样担心将资源与
    类和
    库混用,所以我做了一些修改,找到了这个解决方案:

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

    getClass().getClassLoader().getResourceAsStream("../resources/main.xml");
    
    我不知道使用
    是一个更干净的解决方案,但我的文件至少没有与类或JAR混合