Получить текущее имя файла в JSP

Есть ли способ получить JSP в настоящее время, с JSTL или Struts (или без)? как _ _ файл _ _ в Python и PHP?

Ответы

Ответ 1

Ну... да... в некотором роде

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

Я использую JSP под названием pre.jsp для того, что я включаю в начало каждого JSP в моем 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 %> -->

Плюс я поставил это в конце каждого JSP:

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

Это дает мне согласованный журнал. Чтобы убедиться, что каждый JSP "правильный", у меня есть проверка моей сборки script, которая просто ищет две строки "/pre.jsp" и `` END <% = __ jspName`.

Примечание. Существует много символов, которые разрешены в именах файлов, но не в именах классов Java. Если вы их используете, ваши имена классов могут выглядеть странно. В этом случае я предлагаю создать статическую вспомогательную функцию, которая преобразует имена классов в имена файлов и вызывает их, т.е.

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

Каждый JSP-компилятор имеет свои собственные правила; вот один пример: http://itdoc.hitachi.co.jp/manuals/3020/30203Y0510e/EY050044.HTM

Кудос идет к Маркусу Юниусу Брутусу, указав это.

Ответ 2

Более удобным способом является использование: <% = request.getRequestURI()% >

<% = request.getRequestURI()% > Например, во всех моих jsp файлах я всегда ставил эту строку:

Рендеринг файла JSP: '<% = request.getRequestURI()% > '

Это помещает в html визуализированную HTML-строку. Таким образом, в браузере его не видно, но для целей отладки я всегда вижу его inf, который я делаю "Просмотр источника".

Ответ 3

Мне удалось использовать JSTL следующим образом:

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

И теперь вы должны увидеть в качестве комментария HTML имя сервлета, созданного контейнером, для отображения вашего JSP файла, имя которого очень близко к исходному файлу JSP.

Ответ 4

Это простое решение для копирования-вставки:

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