天天看點

struts2通路session的兩種方法

  struts2 的action中若希望通路session對象,可采用兩種方式:

    1、從actioncontext中擷取;

    2、實作sessionaware接口。

    1、從actioncontext中擷取:

struts2通路session的兩種方法

    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 org.apache.struts2.interceptor.sessionaware;

    public class sessiontest1action extends actionsupport implements sessionaware {

    private map session;

    public void setsession(map session) {

    this.session = session;

    this.session.put("user_name", "test user 1");

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

繼續閱讀