在JSP中获取当前文件名

时间:2009-05-14 13:10:41

标签: java jsp struts jstl

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

4 个答案:

答案 0 :(得分:17)

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

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

我正在使用一个名为pre.jsp的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 %> -->

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

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

这给了我一个完整的日志。为了确保每个JSP都是“正确的”,我检查了我的构建脚本,它只查找两个字符串"/pre.jsp"和``END&lt;%= __ jspName`。

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

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

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

Kudos转到Marcus Junius Brutus指出这一点。

答案 1 :(得分:0)

更方便的方法是使用:&lt;%= request.getRequestURI()%&gt;

&lt;%= request.getRequestURI()%&gt; 例如,在我的所有jsp文件中,我总是把这行:

渲染JSP文件:'&lt;%= request.getRequestURI()%&gt;'

这会将一个注释的html行放入渲染的html中。这样一来就无法在浏览器中看到它,但出于调试目的,我总能看到它“我查看源代码”。

答案 2 :(得分:0)

我成功使用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源文件非常接近。

答案 3 :(得分:0)

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

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