Struts Session只是
Map<String,Object>底层的包装
HttpSession。
虽然实现SessionAware接口是在Action中获取它的正确方法,但是如果要从Interceptor中获取它,则需要执行以下操作:
要获取Struts 会话图 :
@Overridepublic String intercept(ActionInvocation ai) throws Exception { final ActionContext context = ai.getInvocationContext(); // Struts Session Map<String, Object> session = context.getSession();要获得真正的 HttpSession对象 :
@Overridepublic String intercept(ActionInvocation ai) throws Exception { final ActionContext context = ai.getInvocationContext(); HttpServletRequest request = (HttpServletRequest)context.get(StrutsStatics.HTTP_REQUEST); // Http Session HttpSession session = request.getSession();就是说,您没有在动作中获得会话(也没有其他任何参数,对象等)的原因是,您陷入一个常见错误: 仅应用一个 (您的) 拦截器, 而不是
应用整个拦截器堆栈 (其中应包含您的):
您可以在每个动作中定义两次:
<action name="login" > <interceptor-ref name="defaultStack" /> <!-- this is missing --> <interceptor-ref name="containskeyinterceptor" />
或者更好的是,在自定义堆栈中定义一次,并始终使用堆栈:
<interceptors> <interceptor-stack name="yourStack"> <interceptor-ref name="defaultStack"/> <interceptor-ref name="containskeyinterceptor"/> </interceptor-stack></interceptors><action name="login" > <interceptor-ref name="yourStack" />
并最终使用default-interceptor-ref定义它,以避免为该程序包的每个操作配置编写它:
<default-interceptor-ref name="yourStack"/><action name="login" >



