【问题标题】:Get current filename in JSP在 JSP 中获取当前文件名
【发布时间】:2010-10-26 04:22:53
【问题描述】:

有没有办法获取当前呈现的 JSP,使用 JSTL 或 Struts(或不使用)?像 Python 和 PHP 中的 _ 文件 _ _?

【问题讨论】:

    标签: java jsp struts jstl


    【解决方案1】:

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

    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

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

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

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

    感谢 Marcus Junius Brutus 指出这一点。

    【讨论】:

    • 是的。这正是我的用例......我想它会做
    • 请注意,这只适用于 Java 1.5 或更高版本。否则会报“无法解析符号”错误
    • @ScottChu:对于 Java 1.4,请改用 getClass().getName()。
    • 我认为这不适用于包含。这只会打印出初始 JSP 的名称。
    • 如果您的 JSP 文件名中有下划线或连字符,这将不起作用。例如。如果您有像 foo-1.jsp 或 foo_1.jsp 这样的 JSP。 JSP 文件名到类名的转换(例如itdoc.hitachi.co.jp/manuals/3020/30203Y0510e/EY050044.HTM)要求您考虑转义序列,如_005f(用于下划线)等。赞成,但除非您强制执行确保此类字符的 JSP 文件命名约定,否则它似乎很脆弱不会出现。
    【解决方案2】:

    更方便的方法是使用:

    例如,在我所有的 jsp 文件中,我总是放这一行:

    渲染 JSP 文件:''

    这会将注释的 html 行放入呈现的 html 中。这样在浏览器中看不到它,但出于调试目的,我总是可以在“查看源代码”时看到它。

    【讨论】:

    • 但是,如果它来自包含或从 servlet 呈现,则仅显示请求的 URI,而不是呈现的 jsp
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-13
        • 2012-12-21
        • 1970-01-01
        • 1970-01-01
        • 2013-10-31
        相关资源
        最近更新 更多