技术中心

这里象征着我们的态度和能力

struts2访问session的两种方法
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-09-14      浏览次数:9245
分享到:
欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

    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] view plaincopyprint?

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

   

    …

   

    …

   

   

    …

   

    …

   

   

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

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730