Struts2如何访问session

时间:2014-8-21 15:24:54

  核心提示:目前大多项目的开发都使用了Struts2,下面介绍一下Struts2是如何访问Session的。 Struts2 的Action中若希望访问Session对象,可采用两种方式: 1、从ActionCo...

   目前大多项目的开发都使用了Struts2,下面介绍一下Struts2是如何访问Session的。

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

    1、从ActionContext中获取;

    2、实现SessionAware接口。

 

    1、从ActionContext中获取:

    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;

    }

    }

    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接口(Java免费学习网 http://www.javalearns.com):

    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;

    }

    }

    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配置:

    <interceptors>

    …

    <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/>

    …

    </interceptors>

    <interceptor-stack name="defaultStack">

    …

    <interceptor-ref name="servletConfig"/>

    …

    </interceptor-stack>

    <interceptors> … <interceptor name="servletConfig" class="org.apache.struts2.interceptor.ServletConfigInterceptor"/> … </interceptors> <interceptor-stack name="defaultStack"> … <interceptor-ref name="servletConfig"/> … </interceptor-stack>

    打开ServletConfigInterceptor.java源码:

    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();

    }

    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进行操作了。

Tags:如何 访问 
作者:java小助手 来源:java学习网
    你是从哪里知道本网站的?
  • 网友介绍的
  • 百度搜索的
  • Google搜索的
  • 其它搜索过来的
  • 网址输错了进来的
  • 太忙了不记得了
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • java学习网(www.javalearns.com) © 2014 版权所有 All Rights Reserved.
  • Email:javalearns@163.com 站长QQ:1356121699 晋ICP备14003680号-3
  • java学习网部分内容来自网络或网友发布,如侵犯了您利益,请发邮件至:javalearns@126.com,我们尽快处理!
  • Java学习网
  • 网站统计
  • 晋公网安备 14042902000001号