如何在JSP中包含/导入文件之前检查文件是否存在?

时间:2010-04-12 19:09:55

标签: jsp import jstl file-exists

假设 requestScope.importMe 期待JSP文件的路径

<c:choose>
    <c:when test="${!empty requestScope.importMe && fileExists(requestScope.importMe) }">
    <c:import url="${requestScope.importMe}" />   
    ...
</c:choose>

如何在尝试包含文件之前检查文件是否存在,以免引发错误?

我更喜欢使用JSTL标签的解决方案。

2 个答案:

答案 0 :(得分:22)

将其放在c:catch标记中。它会抓住任何抛出的Exception

<c:catch var="e">
    <c:import url="${url}" />
</c:catch>
<c:if test="${!empty e}">
    Error: ${e.message}
</c:if>

但我必须承认,我不喜欢c:catch方法。它滥用例外来控制流量。如果可以的话,而是在File#exists()(和ServletContext#getRealPath())的帮助下,在servlet或JavaBean中完成这项工作。

答案 1 :(得分:4)

@BalusC非常聪明,可能会回答这个问题。

但是,要完成,标准JSTL中的任何内容都不会执行您想要的操作,但您当然可以创建自己的EL函数来进行检查。显然你需要为它编写Java,但它不在你的JSP中内联。

J2EE 1.4教程有section创建自己的EL函数。