首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

struts2 拦截器 和session 的存取有关问题

2012-10-20 
struts2 拦截器 和session的存取问题 在线等我第一个用户登录后,把用户名存到session中, 第一次拦截器中取

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运行之前。

热点排行