【问题标题】:How can you check if a file exists before including/importing it in JSP?在 JSP 中包含/导入文件之前,如何检查文件是否存在?
【发布时间】:2011-02-07 03:42:39
【问题描述】:

假设 requestScope.importMe 需要一个 JSP 文件的路径

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

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

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

【问题讨论】:

    标签: jsp import jstl file-exists


    【解决方案1】:

    把它放在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 方法。它滥用异常来控制流程。如果可以的话,不如在 servlet 或 JavaBean 中完成这项工作,而不是在 File#exists()(和 ServletContext#getRealPath())的帮助下。

    【讨论】:

    • 嗨@BalusC!我也在寻找你的答案中给出的那种实现。我在 SO 帖子上进行搜索,但我认为您的回答是实现我的需求的最简单方法,我不确定对已经提出的问题重新提出问题。我需要在 jstl 中导入动态 url:我尝试加载特定区域的 url(例如:./3/myJspx.jspx,如果找不到文件,它会回退到默认区域 jspx:./myJspx .jspx .. 鉴于您的答案已经过去了很长时间,同时,您是否提出了任何其他解决方案或有任何其他提示?
    【解决方案2】:

    @BalusC 很聪明,很可能回答了这个问题。

    但是,要完整地说,标准 JSTL 中的任何内容都不能满足您的要求,但您当然可以创建自己的 EL 函数来进行检查。显然,您需要为它编写 Java,但它不是内联在您的 JSP 中。

    J2EE 1.4 教程中有一个section 用于创建您自己的 EL 函数。

    【讨论】:

    • 这个stackOverflow问题解释了制作你自己的java的细节......stackoverflow.com/questions/16788790/…
    • @WillHartung:上面的部分链接不再深入到您所指的部分(我认为)。如果不是太大,您能否将答案的主要部分包含在问题中,或者修复链接?
    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 2015-02-21
    • 2023-03-05
    • 2021-05-31
    • 2019-03-07
    • 2013-07-22
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多