java 普通类获取session_如何在Java的普通类中获取Session以及request对象
展開全部
你是指你的 web 項目中使用到一個工具性的類,它的e69da5e6ba9062616964757a686964616f31333337613865形參中沒有 HttpRequest 或 HttpSession 參數?
如果是這樣的話,我們需要使用一個 ThreadLocal 變量,我們把當前 ?request 的變量綁定到里面,在一個 request 請求的生命周期內我們在方法調用的各個更深的層次中都可以直接使用它而不需要在每個方法中都傳遞這個 request 參數,保存在某個地方就容易導致因為多個請求共用同一個實例而出問題,所有 context 相關的變量不保存在任何業務類相關并且可能被多線程共用的對象實例中才是保證不會出現線程安全問題的途徑。
例如,這個例子中我們只要把 web.xml 中配置好 ContextFilter 后它就會自動在請求開始時綁定一個 context,結束后自動銷毀,在這中間的任何時刻我們都可以通過 MyWebContext.getCurrentContext() 得到我們的 HttpServletRequest 實例和其它相關的 context 變量://?MyWebContext?記錄當前?Request?的所有?context?變量。因為?servlet?是一個請求綁定一個線程的,我們用?ThreadLocal?不會有線程安全問題。
class?MyWebContext?{
private?static?final?ThreadLocal?contexts?=?new?ThreadLocal();
//?拿出當前線程綁定的?context
public?static?MyWebContext?getCurrentContext()?{
return?(MyWebContext)?contexts.get();
}
public?static?MyWebContext?createContext()?{
return?new?MyWebContext();
}
//?綁定一個?context?到當前線程
public?static?void?setContext(MyWebContext?context)?{
contexts.set(context);
}
public?static?void?clearContext()?{
contexts.set(null);
}
private?HttpRequest?request;
public?void?setRequest(HttpRequest?request)?{
this.request?=?request;
}
public?HttpRequest?getRequest()?{
return?this.request;
}
}
class?ContextFilter?implements?Filter?{
public?void?doFilter(ServletRequest,?SerlvetResponse,?FilterChain?chain)?{
//?創建并綁定我們的?context
MyWebContext?context?=?MyWebContext.createContext();
context.setRequest(request);
MyWebContext.setContext(context);
try?{
chain.doFilter(request,?response);
}?finally?{
//?銷毀?context
MyWebContext.clearContext();
}
}
}
class?MyToolClassWithoutRequestParameter?{
public?static?String?getFileUploadPath()?{
//?其它方法只要它是工作在?servlet?請求調用鍵中間的某個時刻,它就肯定能拿到?Filter?綁定進去的?Request,這樣我們就不必要在每次方法調用中都額外地傳遞一個?HttpRequest?參數,當調用層次很深時這能明顯減少復雜性。
MyWebContext?contex?=?MyWebContext.getCurrentContext();
HttpRequest?request?=?context.getRequest();
HttpServletContext?servletContext?=?...;
HttpSession?session?=?request.getSession(false);
...
}
}
總結
以上是生活随笔為你收集整理的java 普通类获取session_如何在Java的普通类中获取Session以及request对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: qq运动怎么不显示手机型号
- 下一篇: java中的asList_Java Ar