2013年1月5日土曜日

HttpServletRequestのthread内共有

ASP.NETを利用していると
static HttpContext HttpContext.Current からリクエスト情報を取得して
IPADDRESS等の情報をどこででも取得することができます

似たような意識でJavaで実装していると
どうしてもHttpServletRequestの取得でつまずいてしまいます。

そこで、スレッド毎に値を保持するThreadLocalを利用して
HttpServletRequest をスレッド内で参照できるようにします


private final static ThreadLocal<HttpServletRequest> servletRequests = new ThreadLocal<HttpServletRequest>();

public static void setServletRequest(HttpServletRequest request) {
    servletRequests.set(request);
}

public static HttpServletRequest getServletRequest() {
    return servletRequests.get();
}


もちろん非同期な実装では参照できなくなる(かな?)
リクエスト初期化時にセットする必要があります。
リクエスト終了後はガベージコレクション対象になります。

0 件のコメント: