开发一个简单的Web应用程序(Eclipse + JBoss + Apache Tomcat)来生成XML文件。
“业务范围”列表针对数据库进行查询,“列群集”列表使用所选的“业务范围”项查询数据库。这两个都是存储外部文本文件的唯一查询。
这些文件目前存储在以下位置:
然后将这些用于种子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;
}
我想知道:
META-INF
是一个好位置,还是META-INF/resources
首选?)open
方法以便找到要打开的文件?)我已经建立了JNDI来建立数据库连接,但如果可能的话,宁愿不使用JNDI来获取文件的句柄。
谢谢!
答案 0 :(得分: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));
关于使用META-INF的一些有用信息:What's the purpose of META-INF?
答案 1 :(得分:4)
我有与Dave Jarvis关于将资源与classes
和lib
混合的类似问题,所以我做了一些小事,找到了这个解决方案:
我将资源文件放在WEB-INF/resources
中。然后,为了加载它们,我使用了这个:
getClass().getClassLoader().getResourceAsStream("../resources/main.xml");
我不知道使用..
是一个更清洁的解决方案,但我的文件至少不与类或罐混合。
答案 2 :(得分:0)