Peter is correct.PageContext
は、ページの処理範囲にプロビジョニングされています。コンシューマは、現在のスレッドの外側でインスタンスにアクセスできないように暗黙のうちに指定していることを意味する、このスコープ外のインスタンスへの参照を保持すべきではありません。
JSP 2.2 specificationから例JSP処理コード:PageContext
インスタンスが(プールまたはインスタンス作成から)プロビジョニングされている方法
public class foo implements Servlet {
// ...
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
JspFactory factory = JspFactory.getDefaultFactory();
PageContext pageContext = factory.getPageContext(
this,
request,
response,
null, // errorPageURL
false, // needsSession
JspWriter.DEFAULT_BUFFER,
true // autoFlush
);
// initialize implicit variables for scripting env ...
HttpSession session = pageContext.getSession();
JspWriter out = pageContext.getOut();
Object page = this;
try {
// body of translated JSP here ...
} catch (Exception e) {
out.clear();
pageContext.handlePageException(e);
} finally {
out.close();
factory.releasePageContext(pageContext);
}
}
コンテナの実装の詳細です。
知っておきたいことですが、なぜPageContextにライフサイクルメソッドがあるのですか?それがリサイクルされていないのはなぜですか? – murungu
@murungu:コンテナは、ページコンテキストオブジェクトのプールを使用することがあります。これらのメソッドは、ページコンテキストの使用の開始と終了を示すためにコンテナによって呼び出されます。ページコンテキストは、必要な初期化またはクリーンアップを行う必要があります。これらのメソッドは、JSPページの作成者によって呼び出されることはありません。 –