有没有办法使用 JSTL 或 Struts(或不使用)获取当前呈现的 JSP?像 Python 和 PHP 中的 _ 文件 _ _?
4 回答
嗯......是的......在某种程度上
String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");
我正在使用一个名为的 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 %> -->
另外我把它放在每个 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指出这一点。
我成功地使用了 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 源文件非常接近。
这是一个简单的复制粘贴解决方案:
<%=this.getClass().getSimpleName().replaceFirst("_jsp","")%>
更方便的方法是使用:<%= request.getRequestURI() %>
<%= request.getRequestURI() %> 例如,在我所有的 jsp 文件中,我总是放这行:
呈现 JSP 文件:'<%= request.getRequestURI() %>'
这会将注释的 html 行放入呈现的 html 中。这样人们就无法在浏览器中看到它,但出于调试目的,我总是可以在执行“查看源代码”时看到它。