阅读 Web 应用程序资源
Posted
技术标签:
【中文标题】阅读 Web 应用程序资源【英文标题】:Reading Web Application Resources 【发布时间】:2011-07-07 16:52:41 【问题描述】:背景
开发一个简单的 Web 应用程序(Eclipse + JBoss + Apache Tomcat)来生成 XML 文件。
问题
“业务领域”列表查询数据库,“列簇”列表使用选定的“业务领域”项查询数据库。这两个都是存储外部文本文件的唯一查询。
文件目前存储在以下位置:
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 来获取文件的句柄。
相关网站
http://blogs.oracle.com/alexismp/entry/web_inf_lib_jar_meta http://www.avajava.com/tutorials/lessons/where-do-i-put-resources-in-my-maven-project.html http://docs.jboss.org/jbossweb/3.0.x/config/context.html http://tomcat.apache.org/tomcat-4.0-doc/catalina/docs/api/org/apache/naming/resources/FileDirContext.html谢谢!
【问题讨论】:
【参考方案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 一样担心将资源与 classes
和 lib
混合,所以我做了一些摆弄,找到了这个解决方案:
我将资源文件放在WEB-INF/resources
中。然后,为了加载它们,我使用了这个:
getClass().getClassLoader().getResourceAsStream("../resources/main.xml");
我不知道使用..
是一个更干净的解决方案,但我的文件至少没有与类或罐子混合。
【讨论】:
【参考方案3】:我会将它们放在 WEB-INF/classes 中,或者将它们捆绑在您的 application.jar 中,该文件将进入 WEB-INF/lib 中。然后您可以按照here 和here 的说明从类路径中加载它们
更好的是,如果你使用 maven,最好的做法是将这些类型的文件放在 src/main/resources 中,然后 maven 会为你处理这些。
【讨论】:
以上是关于阅读 Web 应用程序资源的主要内容,如果未能解决你的问题,请参考以下文章
在 Web 应用程序 (Tomcat7) 中从 jar 文件中公开资源
Spring Boot文档阅读笔记-CORS Support
Spring Boot文档阅读笔记-CORS Support
Spring Boot文档阅读笔记-CORS Support