在JSP中获取当前文件名

elz*_*app 17 java jsp struts jstl

有没有办法通过JSTL或Struts(或不使用)获取当前呈现的JSP?喜欢Python和PHP中的_ _ file _ _?

Aar*_*lla 18

嗯...是的......在某种程度上

String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");
Run Code Online (Sandbox Code Playgroud)

我正在使用一个名为JSP的JSP pre.jsp,它包含在我的webapp中每个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 %> -->
Run Code Online (Sandbox Code Playgroud)

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

<!-- END <%=__jspName %> --><% log.info("END JSP "+__jspName); %>
Run Code Online (Sandbox Code Playgroud)

这给了我一个有益的日志.为了确保每个JSP都是"正确的",我检查了我的构建脚本,"/pre.jsp"它只查找两个字符串和``END <%= __ jspName`.

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

String __jspName = MyJspUtils.getFileName(this.getClass());
Run Code Online (Sandbox Code Playgroud)

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

荣誉去马库斯Junius罗马政治家指出了这一点.

  • 如果JSP文件名中有下划线或连字符,则无效.例如,如果你有像`foo-1.jsp`或`foo_1.jsp`这样的JSP.JSP文件名到类名转换(例如http://itdoc.hitachi.co.jp/manuals/3020/30203Y0510e/EY050044.HTM)要求您考虑转义序列,如`_005f`(用于下划线)等.投票,但它确实看起来很脆弱,除非你强制执行JSP文件目录约定,以确保不会出现这样的字符. (2认同)