JSTLまたはStrutsを使用して(または使用せずに)、現在レンダリングされているJSPを取得する方法はありますか?PythonとPHPの__ファイル__のように?
4 に答える
ええと...はい...ある意味で
String __jspName = this.getClass().getSimpleName().replaceAll("_", ".");
pre.jsp
Webアプリケーションの各JSPの上部に含める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が「正しい」ことを確認するために、ビルドスクリプトをチェックして、2つの文字列"/pre.jsp"
と `` END <%=__jspName`を検索します。
注:ファイル名では許可されているが、Javaクラス名では許可されていない文字が多数あります。それらを使用すると、クラス名が奇妙に見える場合があります。その場合は、クラス名をファイル名に変換する静的ヘルパー関数を作成して、それを呼び出すことをお勧めします。
String __jspName = MyJspUtils.getFileName(this.getClass());
各JSPコンパイラには独自のルールがあります。ここに1つの例があります:http://itdoc.hitachi.co.jp/manuals/3020/30203Y0510e/EY050044.HTM
賞賛はそれを指摘するためにマーカスジュニウスブルータスに行きます。
私は次のようにJSTLを使用することに成功しました:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
...
<!-- <c:out value="${pageScope['javax.servlet.jsp.jspPage']}"></c:out> -->
...
これで、JSPファイルをレンダリングするためにコンテナによって生成されたサーブレットの名前がHTMLコメントとして表示されます。この名前は、JSPソースファイルに非常に近いものです。
これは単純なコピー&ペーストソリューションです。
<%=this.getClass().getSimpleName().replaceFirst("_jsp","")%>
より便利な方法は、次を使用することです。<%= request.getRequestURI()%>
<%= request.getRequestURI()%>たとえば、すべてのjspファイルでは、常に次の行を入力します。
JSPファイルのレンダリング:'<%= request.getRequestURI()%>'
これにより、コメント化されたhtml行がレンダリングされたhtmlに配置されます。このようにブラウザで表示することはできませんが、デバッグの目的で、「ソースの表示」を実行するといつでも表示できます。