获取JSP中当前文件名

问题描述 投票:0回答:4

有没有办法获取当前渲染的 JSP,使用 JSTL 还是 Struts(或不使用)?就像 Python 和 PHP 中的 _ _ file _ _ 一样?

java jsp struts jstl
4个回答
21
投票

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

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

我正在使用一个名为

pre.jsp
的 JSP,我将其包含在我的 web 应用程序中每个 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 都是“正确的”,我在构建脚本中进行了检查,该脚本仅查找两个字符串

"/pre.jsp"
和 ``END <%=__jspName`.

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

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

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

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


1
投票

我成功使用 JSTL 如下:

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

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


1
投票

这是一个简单的复制粘贴解决方案:

<%=this.getClass().getSimpleName().replaceFirst("_jsp","")%>

0
投票

更方便的方法是使用:<%= request.getRequestURI() %>

<%= request.getRequestURI() %> 例如,在我的所有 jsp 文件中,我总是放置这一行:

渲染 JSP 文件:'<%= request.getRequestURI() %>'

这会将带注释的 html 行放入渲染的 html 中。这样,人们就无法在浏览器中看到它,但出于调试目的,如果我执行“查看源代码”,我总是可以看到它。

© www.soinside.com 2019 - 2024. All rights reserved.