JSPのすべての暗黙的な変数にアクセスできるのに、なぜpageContextがあるのですか?
私の仮定は次のとおりです。EL式またはJSTLを使用する場合、必要な属性にアクセスまたは設定するにはpageContextです。私が正しいかどうか教えてください。
non-implicit変数にアクセスするために必要です。今では意味がありますか?
Update: HttpServletRequest
および HttpSession
のゲッターメソッドに直接アクセスしたい場合があります。標準のJSPでは、どちらも${pageContext}
でのみ使用できます。以下に、実際の使用例をいくつか示します。
セッションがタイムアウトしたときにページを更新する:
<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval}">
セッションIDをアプレットに渡す(同じセッションでサーブレットと通信できるようにするため):
<param name="jsessionid" value="${pageContext.session.id}">
セッションの最初のリクエスト時にのみメッセージを表示する:
<c:if test="${pageContext.session['new']}">Welcome!</c:if>
ELの予約済みキーワードであるため、new
には特別な扱いがあることに注意してください。少なくともEL 2.2以降です。
ユーザーIPの表示:
あなたのIPは$ {pageContext.request.remoteAddr}です。
現在のコンテキストパスをハードコーディングせずにリンクをドメイン相対にする:
<a href="${pageContext.request.contextPath}/login">login</a>
<base>
タグを動的に定義する( JSTL functions taglibを少し使用して):
<base href="${fn:replace(pageContext.request.requestURL, pageContext.request.requestURI, pageContext.request.contextPath)}/">
等。上記のHttpServletRequest
およびHttpSession
javadocを覗いて、これらのすべてのゲッターメソッドについて学習してください。それらの一部は、JSP/ELでも役立つ場合があります。
@BalusCの優れた答えに追加するために、取得するPageContextは、仕様に表示されるものに限定されない場合があります。
たとえば、 Lucee は、インターフェースと抽象クラスに多くの機能を追加するJSPサーブレットです。 PageContextへの参照を取得することで、他の方法では利用できない多くの情報にアクセスできます。