Java 阅读Web应用程序资源 背景
开发一个简单的web应用程序(Eclipse+JBoss+ApacheTomcat)来生成XML文件 问题 “Business Area”列表查询数据库,“Column Cluster”列表使用选定的“Business Area”项查询数据库。这两种查询都是存储在外部文本文件中的唯一查询 文件当前存储在以下位置: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
- 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;
}
问题
我想知道:
META-INF
是一个好位置,还是META-INF/resources
首选?)open
方法,以便找到要打开的文件?)谢谢大家! 我会将它们放在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混合