获取JSP中当前文件名

发布于 2024-07-19 10:14:12 字数 85 浏览 3 评论 0原文

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

Is there a way to get which JSP is currently rendered, with JSTL or Struts (or without)? like _ _ file _ _ in Python and PHP?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

恬淡成诗 2024-07-26 10:14:12

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

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 的指点那个出来了。

Well ... yes ... in a way

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

I'm using a JSP called pre.jsp for that which I include at the top of each JSP in my webapp:

<%@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 %> -->

Plus I put this at the end of each JSP:

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

That gives me a consistent log. To make sure each JSP is "correct", I have a check in my build script which just looks for the two strings "/pre.jsp" and ``END <%=__jspName`.

Note: There are many characters which are allowed in file names but not in Java class names. If you use them, your class names might look weird. If that's the case, I suggest to create a static helper function which converts class names to File names and call that, i.e.

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

Each JSP compiler has it's own rules; here is one example: http://itdoc.hitachi.co.jp/manuals/3020/30203Y0510e/EY050044.HTM

Kudos go to Marcus Junius Brutus for pointing that out.

鲸落 2024-07-26 10:14:12

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

I succeeded using JSTL as following :

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

And now, you should see as an HTML comment the name of the servlet produced by the container to render your JSP file, which name is very close to the JSP source file.

画中仙 2024-07-26 10:14:12

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

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

Rendering JSP File: '<%= request.getRequestURI() %>'

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

The more convenient way is to use: <%= request.getRequestURI() %>

<%= request.getRequestURI() %>
For example, in all of my jsp files, I always do put this line:

Rendering JSP File: '<%= request.getRequestURI() %>'

This puts a comented html line in to the rendered html. This way one cannot see it in the browser, but for debugging purposes, I can always see it inf I do "View source".

往日 2024-07-26 10:14:12

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

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

This is a simple copy-paste solution:

<%=this.getClass().getSimpleName().replaceFirst("_jsp","")%>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文