Java EE应用程序中的Resources文件夹

时间:2014-05-23 08:41:36

标签: java spring java-ee

我正在开发一个简单的邮件发件人作为 Java EE 应用程序。

项目结构如下所示:

Java EE app proj structure

要正确设置电子邮件内容,我需要阅读资源文件夹中放置的*.vm文件,我应该将其作为路径classpath:/templates/mail/*.vm(与 Spring 一样) ......但我的假设是错误的!

  1. 哪条路径正确?

  2. 我是否必须使用META-INF文件夹?这个解决方案更多吗? java的EE规范?在这种情况下,我在哪里将META-INF文件夹放在我的项目结构中?


  3. 更新

    我将项目打包为.war,然后我将文件放入:

    /src/main/webapp/WEB-INF/classes/templates/mail/
    

    然后:

    org.apache.velocity.Template t = myVelocityEngine.getTemplate("classpath:/templates/mail/account_to_confirm.vm",
                        "UTF-8");
    

    尽管如此,应用程序在运行时返回错误:

    Unable to find resource 'classpath:/templates/mail/account_to_confirm.vm'
    

    我做错了什么?


    只是为了更好地理解:

    假设我想将此应用程序部署为jar(当然要删除servlet类):在这种情况下,我是否应该编辑文件夹布局以便仍然使用相同的路径源代码?

2 个答案:

答案 0 :(得分:1)

如果可以,请使用Classloader.getResourceAsStream(“templates / mail / * .vm”);或类似的getResourceAsURL方法。

如果没有,请查看where files from resources are placed inside WAR。在您的情况下,该文件应位于/ WEB-INF / classes / templates / mail。

答案 1 :(得分:1)

我认为问题是由前缀classpath:引起的:您在哪里发现必须使用它?

您可能会发现有用的理解如何初始化VelocityEngine阅读Loading velocity template inside a jar file以及如何Configuring Resource Loaders in Velocity