阅读Web应用程序资源

Dav*_*vis 6 java jsf jboss servlets web-applications

背景

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

问题

"业务范围"列表针对数据库进行查询,"列群集"列表使用所选的"业务范围"项查询数据库.这两个都是存储外部文本文件的唯一查询.

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

  • 的WebContent/META-INF /业务areas.sql
  • 的WebContent/META-INF /列clusters.sql

然后将它们用于播种PreparedStatement.

源代码

读取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;
  }
Run Code Online (Sandbox Code Playgroud)

问题

我想知道:

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

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

相关网站

谢谢!

lim*_*imc 6

正确的位置(以及通常的做法)是将它们放在您的source目录下,然后将其编译到WEB-INF/classes目录中.我不确定你对@Dave的响应中"classes目录是不是易变的"是什么意思,但这就是大多数(如果不是全部)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));
Run Code Online (Sandbox Code Playgroud)

关于META-INF使用的一些有用信息:META-INF 的目的是什么?