日期:2014-05-17  浏览次数:20624 次

struts2 拦截器 和session 的存取问题 在线等
我第一个用户登录后,把用户名存到session中, 第一次拦截器中取到的是null ,然后我在用第二个用户登录,在把名字存到session 中,拦截器中取到的是上一次的名字,请问这是为什么,该怎么解决呢? 代码如下
 HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession(); 
session.setAttribute("id", user_id);
session.setAttribute("userName", name);
拦截器中:
  ActionContext ctx=invocation.getInvocationContext();  
Map session=ctx.getSession();  
 
String name = (String) session.get("userName");
System.out.println(name+"name00000000000");

------解决方案--------------------
Java code
 
session.setAttribute("id", user_id);
session.setAttribute("userName", name);

------解决方案--------------------
拦截器在 Action前面执行。
你第一次放对象的时候 ,先执行拦截器 ,此时还没有执行Action ,所以对象并没有放到Session ,所以你得到的为null。

第二次放对象的时候,因为第一次Action已经将对象放到Session了。 所以你取到了对象,并且是第一次放的对象。
------解决方案--------------------
探讨
拦截器在 Action前面执行。
你第一次放对象的时候 ,先执行拦截器 ,此时还没有执行Action ,所以对象并没有放到Session ,所以你得到的为null。

第二次放对象的时候,因为第一次Action已经将对象放到Session了。 所以你取到了对象,并且是第一次放的对象。

------解决方案--------------------
为什么要在拦截器中拿数据,或者说拿这个数据干什么用,可以说下程序逻辑么,看看有没有别的方法解决。又或者说你可以对登录不做这项拦截,如果拦截,就会在action运行之前。