我有一个问题。我正在使用Struts(Struts 2 Framework)开发Web应用程序。
我为每个用户创建了一个Freemarker模板文件,并将其保存在
中webapps/mail/mailEn/customer.ftl
现在,当调用页面时,我必须查看customer.ftl所以我尝试在我的java类中照看它,如下所示: (当我使用当地的直接路径C:// ......它有效)
MimeBodyPart textBodyPart = null;
try {
textBodyPart = new MimeBodyPart();
Configuration cfg = new Configuration();
//FileTemplateLoader ftl1 = new FileTemplateLoader(new File ("D:/Workspace//Projectname///web///styles/");
FileTemplateLoader ftl1 = new FileTemplateLoader (new File("\\mail\\mailEn")); TemplateLoader[] loaders = new TemplateLoader[] { ftl1 };
MultiTemplateLoader mtl = new MultiTemplateLoader(loaders);
cfg.setTemplateLoader(mtl);
cfg.setObjectWrapper(new DefaultObjectWrapper());
Template template = cfg.getTemplate("customerInfo.ftl");
Map<String, String> rootMap = new HashMap<String, String>();
rootMap.put("image1", "images/LOGO.jpg");
rootMap.put("recipient", "aaaa");
rootMap.put("address", "xxxx");
rootMap.put("contact", "yyyy");
rootMap.put("country", "uuuu");
rootMap.put("sender", "rrrrr");
Writer out = new StringWriter();
template.process(rootMap, out);
textBodyPart.setContent(out.toString(),Constants.TEXT_HTML);
}
使用绝对路径(D:/....)
,它可以正常工作。但这不可能是
解决方案,因为当我完成这个网络应用程序,我将有一个战争文件,将放在服务器上,绝对路径将是错误的。所以我需要一条始终有效的相对路径!
此刻我正在使用Eclipse。当我尝试使用上面的路径(/../ .. ....)时, 我找不到的文件永远都找不到。 (我试着走到家里的路上 项目,然后到文件夹邮件,文件是)
我试过很多不同的路径,比如./web/mail/,../../../../../web/styles等等, 但我从来没有找到我要找的文件。
如果有人能给我一个暗示该怎么做,我将非常感激!
谢谢!
答案 0 :(得分:0)
你的文件被临时存储在临时文件夹(应用程序服务器/操作系统)中,所以我建议你“
request.getRequestedURI() + "/" + FILE_PATH`
说:你在“URL:PORT / file / file.txt”中保存了“file.txt”,它实际上引用了tmp文件夹,一旦服务器重新启动或取消部署应用程序,它就会被删除。确保您用于保存的文件夹位于web-inf
之外答案 1 :(得分:0)
您应该使用WebappTemplateLoader
(或者ClassTemplateLoader
)。 FileTemplateLoader
不适合这个,因为在理论上你甚至不知道是否会在服务器上提取war
文件,如果它没有被提取,你肯定不会有目录指向。
答案 2 :(得分:0)
解决方案(调整)
我使用了request.getSession().getServletContext().getRealPath()
在一个类中,例如MessageUtility我使用
final private static String MAIL = ResourceBundle.getBundle("cfg_webapp").getString("mails.folder");
String mailpath = request.getSession().getServletContext().getRealPath(MAIL);
FileTemplateLoader ftl1 = new FileTemplateLoader(new File(mailpath));
在我定义的cfg_webapp.properties中
## Mails
mails.folder=mails
它从----- src / main / webapps / mails / customer.ftl获取路径
谢谢大家。