我有一些HTML文件,我想通过我的webapp中的标签包含这些文件。
在某些文件中,我有伪动态代码 - 特殊格式的文本位,在运行时,我希望将其解析为MySQL表中各自的数据位。
例如,HTML文件可能包含一行:
Welcome, [username].
我想解决这个问题(通过登录用户的数据):
Welcome, user@domain.com.
这在JSP文件中很简单,但要求规定文件将由知道基本HTML而不是JSP的人创建。这样的简单文本标签应该很容易让我向他们解释。
我已经设置了代码来设置类似字符串的分辨率,但是有人可以想到跨文件的方法吗?我实际上不需要修改磁盘上的文件 - 只需加载内容,修改它,然后在包含的JSP文件中输出它。
我一直在尝试通过apache readFileToString
将文件加载到字符串中,但我无法弄清楚如何从webapp的内容目录中的特定文件夹加载文件而不用硬编码如果我将来部署到不同的系统,不得不担心它会中断。
答案 0 :(得分:1)
但我无法弄清楚如何从webapp的内容目录中的特定文件夹加载文件而不对其进行硬编码,如果我将来部署到其他系统,则不得不担心它会中断。
如果这些文件位于webcontent中,请使用ServletContext#getRealPath()
将相对Web路径转换为绝对磁盘文件系统路径。如果WAR在应用程序服务器中展开(大多数情况下是默认情况下,默认情况下只有Weblogic不这样做,但这是可配置的IIRC)。在servlet内部,您可以通过继承的getServletContext()
方法获取ServletContext
。
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());
// ...
至于完整的图片,我怀疑你是否考虑过现有的模板框架,例如Freemarker或Velocity来缓解所有工作?