Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1142973
  • 博文数量: 103
  • 博客积分: 1897
  • 博客等级: 上尉
  • 技术积分: 1717
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-19 21:02
文章分类

全部博文(103)

文章存档

2013年(19)

2012年(84)

分类: Java

2012-08-21 08:57:28

Struts2 的Action中若希望访问Session对象,可采用两种方式:

1、从ActionContext中获取;

2、实现SessionAware接口。

 

1、从ActionContext中获取:


  1. import java.util.Map;  
  2. import com.opensymphony.xwork2.ActionContext;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. public class SessionTestAction extends ActionSupport {  
  5.     public String execute() {  
  6.      ActionContext actionContext = ActionContext.getContext();  
  7.        Map session = actionContext.getSession();  
  8.        session.put("USER_NAME""Test User");  
  9.        return SUCCESS;  
  10.     }  
  11. }  
import java.util.Map; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class SessionTestAction extends ActionSupport { public String execute() { ActionContext actionContext = ActionContext.getContext(); Map session = actionContext.getSession(); session.put("USER_NAME", "Test User"); return SUCCESS; } }

 

2、实现SessionAware接口:

  1. import java.util.Map;  
  2. import org.apache.struts2.interceptor.SessionAware;  
  3. import com.opensymphony.xwork2.ActionSupport;  
  4. public class SessionTest1Action extends ActionSupport implements SessionAware {  
  5.     private Map session;  
  6.     public void setSession(Map session) {  
  7.        this.session = session;  
  8.     }  
  9.     public String execute() {  
  10.        this.session.put("USER_NAME""Test User 1");  
  11.        return SUCCESS;  
  12.     }  
  13. }  
import java.util.Map; import org.apache.struts2.interceptor.SessionAware; import com.opensymphony.xwork2.ActionSupport; public class SessionTest1Action extends ActionSupport implements SessionAware { private Map session; public void setSession(Map session) { this.session = session; } public String execute() { this.session.put("USER_NAME", "Test User 1"); return SUCCESS; } } 

 

进一步阅读Struts2.1.8.1源码,SessionAware接口的实现方式如下:

 

struts-default.xml配置:


  1. <interceptors>  
  2.   ...  
  3.   <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>  
  4.   ...  
  5. interceptors>  
  6. <interceptor-stack name="defaultStack">  
  7.   ...  
  8.   <interceptor-ref name="servletConfig"/>  
  9.   ...  
  10. interceptor-stack>  
... ... ... ...  

 

打开ServletConfigInterceptor.java源码:


  1. public String intercept(ActionInvocation invocation) throws Exception {  
  2.     final Object action = invocation.getAction();  
  3.     final ActionContext context = invocation.getInvocationContext();  
  4.       
  5.     ...  
  6.     if (action instanceof SessionAware) {  
  7.         ((SessionAware) action).setSession(context.getSession());  
  8.     }  
  9.     ...  
  10.     return invocation.invoke();  
  11. }  
public String intercept(ActionInvocation invocation) throws Exception { final Object action = invocation.getAction(); final ActionContext context = invocation.getInvocationContext(); ... if (action instanceof SessionAware) { ((SessionAware) action).setSession(context.getSession()); } ... return invocation.invoke(); }

即在拦截器处理过程中发现目标Action实现了SessionAware接口,便会调用Action中已经实现的setSession(...) 方法,将ActionContext中包装的Session注入目标Action中。目标Action也就可以进一步对Session进行操作了。

转载 http://blog.csdn.net/puffCN/article/details/5607557

阅读(773) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~