假设requestScope.importMe正在期待一个JSP文件的路径 c:choose c:when test="${!empty requestScope.importMe fileExists(requestScope.importMe) }" c:import url="${requestScope.importMe}" / .../c:choose 在尝试包含它之前,如何
<c:choose> <c:when test="${!empty requestScope.importMe && fileExists(requestScope.importMe) }"> <c:import url="${requestScope.importMe}" /> ... </c:choose>
在尝试包含它之前,如何检查文件是否存在,以便不会抛出错误?
我更喜欢使用JSTL标签的解决方案。
把它放在一个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())的帮助下。