2010-04-28 45 views
1

我有几个HTML文件,我想通过标记将其包含在我的webapp中。在JSP中包含的文件中输出重新格式化的文本

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

例如,HTML文件可能包含这样一行:

Welcome, [username]. 

我想这个决心(通过登录的用户的数据):

Welcome, [email protected] 

这将是简单在JSP文件中做,但需求决定文件将由知道基本HTML但不是JSP的人创建。但是,像这样的简单文本标签应该很容易让我向他们解释。

我有代码设置为像字符串那样的决议,但任何人都可以想办法跨文件做到这一点?我实际上不需要修改磁盘上的文件 - 只需加载内容,修改它,然后在包含的JSP文件中输出它。

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

回答

1

,但我无法弄清楚如何从Web应用程序的内容目录中的特定文件夹中加载文件时没有硬编码,并不必担心,如果我部署到在未来不同的系统,它打破。

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

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

或者,你可以把它放在web应用的classpath中,并利用ClassLoader#getResource()

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

至于完整的画面,我的问题,如果你曾经认为像现有的模板框架FreemarkerVelocity,以减轻所有的工作?

+0

我已经考虑过使用Freemarker或Velocity,但作为项目中唯一的开发人员,我花费了太多的时间来加快他们的速度,并且在应用程序中只有几个地方它真的对我来说使用它是有意义的。 – javanix 2010-04-28 23:26:06

+0

非常感谢,顺便说一句,getRealPath()正是我所需要的。 – javanix 2010-04-28 23:30:21

+0

不客气。 – BalusC 2010-04-28 23:31:47