1 package jfun.yan.web; 2 3 import javax.servlet.http.HttpServletRequest ; 4 import javax.servlet.http.HttpSession ; 5 6 import jfun.yan.factory.Pool; 7 import jfun.yan.factory.SimplePool; 8 9 10 17 final class HttpPool { 18 private final ThreadLocal current_request = new InheritableThreadLocal (); 19 20 public void setRequest(HttpServletRequest req){ 21 current_request.set(req); 22 } 23 private HttpServletRequest getRequest(){ 24 final Object r = current_request.get(); 25 if(r==null){ 26 throw new IllegalStateException ("no current HttpRequest available."); 27 } 28 return (HttpServletRequest )r; 29 } 30 private HttpSession getSession(){ 31 return getRequest().getSession(); 32 } 33 public void setCurrentRequest(HttpServletRequest req){ 34 current_request.set(req); 35 } 36 public Pool getRequestPool(String key){ 37 return new RequestPool(key); 38 } 39 public Pool getSessionPool(String key){ 40 return new SessionPool(key); 41 } 42 private final class RequestPool extends SimplePool{ 43 private final String key; 44 45 RequestPool(String key) { 46 this.key = key; 47 } 48 49 public Object get() { 50 return getRequest().getAttribute(key); 51 } 52 53 public void set(Object v){ 54 getRequest().setAttribute(key, v); 55 } 56 protected Object getMutex(){ 57 return getRequest(); 58 } 59 } 60 private final class SessionPool extends SimplePool{ 61 private final String key; 62 63 SessionPool(String key) { 64 this.key = key; 65 } 66 67 public Object get() { 68 return getSession().getAttribute(key); 69 } 70 71 public void set(Object v){ 72 getSession().setAttribute(key, v); 73 } 74 77 protected Object getMutex(){ 78 return getSession(); 79 } 80 } 81 } 82 | Popular Tags |