|
    
- 帖子
- 473
- 主题
- 0
- 精华
- 1
- 积分
- 1047
- 疯狂金币
- 543
- 疯狂水晶
- 1
- 性别
- 男
- 在线时间
- 166 小时

|
Struts2+Spring 当Action的Bean设置成Scope="session"时
如果Action有继承SessionAware, ServletRequestAware, ServletResponseAware这三个接口
那么实现方法应该这样写-
- private final static ThreadLocal<Map> SESSION_THREADLOCAL = new ThreadLocal<Map>();
- private final static ThreadLocal<HttpServletRequest> REQUEST_THREADLOCAL = new ThreadLocal<HttpServletRequest>();
- private final static ThreadLocal<HttpServletResponse> RESPONSE_THREADLOCAL = new ThreadLocal<HttpServletResponse>();
- public void setSession(Map session) {
- SESSION_THREADLOCAL.set(session);
- }
- public void setServletRequest(HttpServletRequest request) {
- REQUEST_THREADLOCAL.set(request);
- }
- public void setServletResponse(HttpServletResponse response) {
- RESPONSE_THREADLOCAL.set(response);
- }
- public Map getSession(){
- return SESSION_THREADLOCAL.get();
- }
- public HttpServletRequest getRequest(){
- return REQUEST_THREADLOCAL.get();
- }
- public HttpServletResponse getResponse(){
- return RESPONSE_THREADLOCAL.get();
- }
复制代码 而不要写成- private Map session;
- private HttpServletRequest request;
- private HttpServletResponse response;
- public void setSession(Map session) {
- this.session = session;
- }
- public void setServletRequest(HttpServletRequest request) {
- this.request = request;
- }
- public void setServletResponse(HttpServletResponse response) {
- this.response = response;
- }
- public Map getSession() {
- return session;
- }
- public HttpServletRequest getRequest() {
- return request;
- }
- public HttpServletResponse getResponse() {
- return response;
- }
复制代码 为什么?
因为当同一个session高并发请求同一个Action的时候,成员变量会被各线程共用,将导致你非常沮丧。
同理,在Action中自己定义的成员变量也会有一样的情况发生。所以也要慎用。
不过这也是双刃剑。用得好的话,还是非常有利的。比如在编辑的时候可以省去很多hidden
[ 本帖最后由 bruceye 于 2010-4-7 16:51 编辑 ] |
-
1
评分人数
-
|