0

我有一个问题。我正在使用 Struts(Struts 2 框架)开发一个 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 等等,但我从未找到我要查找的文件。

如果有人能给我提示该怎么做,我将不胜感激!

谢谢!

4

3 回答 3

0

实际上,您的文件已存储在临时文件夹(应用程序服务器/操作系统)中,所以我建议您`

request.getRequestedURI() + "/" + FILE_PATH`

说:您在“URL:PORT/file/file.txt”中保存了“file.txt”,它实际上是指 tmp 文件夹,一旦服务器重新启动或应用程序取消部署,它就会被删除。确保您用来保存的文件夹在 web-inf 之外

于 2013-10-17T12:08:12.210 回答
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 获取路径

谢谢大家。

于 2014-01-02T06:30:11.037 回答
0

你应该使用WebappTemplateLoader(或者也许ClassTemplateLoader)。FileTemplateLoader不适合这个,因为理论上你甚至不知道war文件是否会在服务器上被提取,如果它没有被提取,你肯定不会有一个目录可以指向。

于 2013-10-17T20:55:28.093 回答