struts 2 Webapplication中文件的相对路径

问题描述 投票:0回答:3

我有一个问题。我正在使用Struts(Struts 2 Framework)开发Web应用程序。

我为每个用户创建了一个Freemarker模板文件并将其保存

webapps/mail/mailEn/customer.ftl

现在,当调用页面时,我必须查看customer.ftl所以我尝试在我的java类中照看它:(当我使用本地direcory路径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:/....)它没有问题。但这不是解决方案,因为当我完成这个网络应用程序时,我将有一个war文件将放在服务器上,然后绝对路径将是错误的。所以我需要一条永远有效的相对路径!

我现在正在使用Eclipse。当我尝试使用上面的路径(/../ .. ....)时,找不到我正在寻找的文件。 (我试图进入项目的主路径,然后到文件夹邮件,文件所在的位置)

我尝试了许多不同的路径,如./web/mail/,../../../../../web/styles等,但我从未找到我要找的文件。

如果有人能给我一个提示做什么,我将非常感激!

谢谢!

java eclipse struts2 hashmap freemarker
3个回答
0
投票

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


0
投票

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

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

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


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获取路径

谢谢大家。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.