在JSF应用程序中放置资源文件的最佳位置
在常规java应用程序中,如果我有一个静态资源文件,我习惯于使用类加载器来获取它。然而,我发现这是JSF web应用程序中的一个问题 首先,maven不会将资源文件从src复制到target,然后将其打包到war文件中,除非您在pom.xml中特别添加了资源标记。这是一种痛苦,但更糟糕的是,标记似乎阻止了生成源阶段在JPA元模型中复制—破坏了包 因此,这样的资源文件似乎应该放在其他地方,比如WEB-INF下的某个地方。有人能告诉我这方面的常见做法吗?我是否仍然使用类加载器的getResourceAsStream方法或其他方法 更新一些澄清: 我在pom.xml文件中使用的是: 这很管用——我从words.txt获取数据,就像我是java桌面应用程序一样。问题在于,当我将其放在pom.xml中时,下次执行清理和构建操作时,JPA元模型将被删除而不再创建,从而导致编译时错误 有趣的是,Netbeans 7.0 IDE确实以某种方式生成了元模型。但它不存储在目标目录中,而是存放在~/.netbeans下的缓存目录中 更新2另一个问题: 我注意到有一种方法:在JSF应用程序中放置资源文件的最佳位置,jsf,maven,jsf-2,Jsf,Maven,Jsf 2,在常规java应用程序中,如果我有一个静态资源文件,我习惯于使用类加载器来获取它。然而,我发现这是JSF web应用程序中的一个问题 首先,maven不会将资源文件从src复制到target,然后将其打包到war文件中,除非您在pom.xml中特别添加了资源标记。这是一种痛苦,但更糟糕的是,标记似乎阻止了生成源阶段在JPA元模型中复制—破坏了包 因此,这样的资源文件似乎应该放在其他地方,比如WEB-INF下的某个地方。有人能告诉我这方面的常见做法吗?我是否仍然使用类加载器的getResource
FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(String ..);
这是我应该用的吗?然而,我不想将资源文件暴露于外界——我宁愿将其隐藏在WEB-INF中。为了解决这个问题,我将公布我是如何解决这个问题的。基本上这是可行的:
FacesContext fc = FacesContext.getCurrentInstance();
InputStream ris = fc.getExternalContext().getResourceAsStream("/resources/misc/words.txt");
我选择将words.txt文件放在/resources目录中,但我可以将其移动到/WEB-INF中的某个位置。由于Maven插件将资源目录复制到目标目录,因此没有任何新的配置。请重新编写并直接提问好吗?我不知道你在读了两遍你的问题后说了什么。关于更新2:你可以自己把它放在/WEB-INF中,并在ExternalContextgetResourceAsStream路径中引用它。然而,我更喜欢将它放在类路径中,从而解决Maven问题。我也更喜欢这样。Maven对我来说是相当不透明的,我希望我能在上面找到合适的文档。
FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream(String ..);
FacesContext fc = FacesContext.getCurrentInstance();
InputStream ris = fc.getExternalContext().getResourceAsStream("/resources/misc/words.txt");