1

我有一些 HTML 文件,我想通过我的 webapp 中的标签包含这些文件。

在一些文件中,我有伪动态代码 - 特殊格式的文本位,在运行时,我希望将其解析为 MySQL 表中它们各自的数据位。

例如,HTML 文件可能包含一行内容:

Welcome, [username].

我希望将其解决为(通过登录用户的数据):

Welcome, user@domain.com.

这在 JSP 文件中很简单,但要求这些文件将由了解基本 HTML 而不是 JSP 的人创建。然而,像这样的简单文本标签应该很容易让我向他们解释。

我已将代码设置为对字符串进行类似的解析,但是任何人都可以想出一种跨文件执行此操作的方法吗?我实际上不需要修改磁盘上的文件——只需加载内容,修改它,然后在包含的 JSP 文件中输出它。

我一直在尝试通过 apache 将文件加载到字符串中readFileToString,但我无法弄清楚如何从 webapp 内容目录中的特定文件夹加载文件,而无需对其进行硬编码并且不必担心它会中断我将来会部署到不同的系统。

4

1 回答 1

1

但我无法弄清楚如何从 webapp 内容目录中的特定文件夹加载文件,而不对其进行硬编码,并且如果我将来部署到不同的系统,我不得不担心它会损坏。

如果这些文件位于 web 内容中,请使用ServletContext#getRealPath()将相对 web 路径转换为绝对磁盘文件系统路径。如果 WAR 在应用程序服务器中爆炸,则此方法有效(大多数默认情况下会这样做,只有 Weblogic 默认情况下不会这样做,但这是可配置的 IIRC)。在 servlet 内部,您可以ServletContext通过继承的getServletContext()方法获得 。

String relativeWebappURL = "/html/file.html";
String absoluteFilePath = getServletContext().getRealPath(relativeWebappURL);
File file = new File(absoluteFilePath);
// ...

或者,您可以将它放在 web 应用程序的类路径中并使用ClassLoader#getResource()

String relativeClasspathURL = "/html/file.html";
URL absoluteClasspathURL = Thread.currentThread().getContextClassLoader().getResource(relativeClasspathURL);
File file = new File(absoluteClasspathURL.toURI());
// ...

至于整体情况,我质疑您是否考虑过现有的模板框架,如FreemarkerVelocity来简化所有工作?

于 2010-04-28T23:16:57.620 回答