Struts2: “Aware”接口与servletConfig拦截器

Struts2中,action类可以通过实现SessionAware接口来获取当前session的Map对象,并将其储存于自身变量中:

public class ExampleAction extends ActionSupport implements SessionAware {  
    private Map<String, Object> session;
    @Override
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }
}

在action的validate()方法和execute()方法中,可以操作该session对象以达到读写Session的目的。

与SessionAware接口相关的拦截器是servletConfig(ServletConfigInterceptor),该拦截器运行时会调用setSession()方法并传入ActionContext对象中的session实例:

if (action instanceof SessionAware) {  
    ((SessionAware) action).setSession(context.getSession());
}

值得注意的是,在Struts2的默认拦截器栈中,servletConfig拦截器是在validate拦截器之前运行的,这保证了当action中的validate()方法运行时session对象已经设定好,从而可以在验证过程中进行Session操作。

与SessionAware接口类似,action类还可以通过实现其它的“Aware”接口来使用servletConfig拦截器,获取相应的对象。这些“Aware”接口包括:ServletRequestAware、ServletResponseAware、ParameterAware、ApplicationAware、RequestAware、PrincipalAware、ServletContextAware。