我正在开发一个简单的邮件发件人作为 Java EE 应用程序。
项目结构如下所示:
要正确设置电子邮件内容,我需要阅读资源文件夹中放置的*.vm
文件,我应该将其作为路径classpath:/templates/mail/*.vm
(与 Spring 一样) ......但我的假设是错误的!
哪条路径正确?
我是否必须使用META-INF
文件夹?这个解决方案更多吗?
java的EE规范?在这种情况下,我在哪里将META-INF
文件夹放在我的项目结构中?
更新
我将项目打包为.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类):在这种情况下,我是否应该编辑文件夹布局以便仍然使用相同的路径源代码?
答案 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。