Get current filename in JSP

前端 未结 4 1982
礼貌的吻别
礼貌的吻别 2020-12-28 17:42

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

相关标签:
4条回答
  • 2020-12-28 18:04

    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 consistend 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.

    0 讨论(0)
  • 2020-12-28 18:08

    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.

    0 讨论(0)
  • 2020-12-28 18:19

    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".

    0 讨论(0)
  • 2020-12-28 18:30

    This is a simple copy-paste solution:

    <%=this.getClass().getSimpleName().replaceFirst("_jsp","")%>
    
    0 讨论(0)
提交回复
热议问题