Search code examples
javajspstrutsjstl

Get current filename in JSP


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


Solution

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