在 JSP 中获取当前文件名

2022-09-02 10:24:11

有没有办法得到哪个JSP当前呈现,使用JSTL或Struts(或不带)?比如 Python 和 PHP 中的 _ _ file _ _ ?


答案 1

井。。。是的。。。在某种程度上

String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");

我正在使用一个JSP,它包含在我的Web应用程序中每个JSP的顶部:pre.jsp

<%@page import="org.apache.log4j.Logger"%>
<%
    String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");

    Logger log = Logger.getLogger(this.getClass().getName());
    log.info("BEGIN JSP "+__jspName);
%>
<!-- BEGIN <%=__jspName %> -->

另外,我把它放在每个JSP的末尾:

<!-- END <%=__jspName %> --><% log.info("END JSP "+__jspName); %>

这给了我一个一致的日志。为了确保每个JSP都是“正确的”,我在我的构建脚本中进行了一次检查,它只查找两个字符串和“END <%=__jspName”。"/pre.jsp"

注: 有许多字符允许在文件名中使用,但在 Java 类名中不允许。如果您使用它们,您的类名可能看起来很奇怪。如果是这种情况,我建议创建一个静态帮助器函数,它将类名转换为文件名并调用它,即

String __jspName = MyJspUtils.getFileName(this.getClass());

每个JSP编译器都有自己的规则;这里有一个例子:http://itdoc.hitachi.co.jp/manuals/3020/30203Y0510e/EY050044.HTM

感谢Marcus Junius Brutus指出了这一点。


答案 2

我成功地使用了JSTL,如下所示:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<!-- <c:out value="${pageScope['javax.servlet.jsp.jspPage']}"></c:out> -->
...

现在,您应该将容器生成的 servlet 的名称作为 HTML 注释来呈现 JSP 文件,该名称非常接近 JSP 源文件。