webwork 之销毁session

销毁的意思?不是清空。而是使之失效;


一个奇怪的问题:退出系统的时候,按说ServerletListener监听到session的销毁,应该关闭掉session,并且在此之前会销毁session里面的东西,可是我发现退出系统的时候,这些销毁动作并没有产生。

查查资料,才明白,原来在userLogoutaction里面只清空了webwork的session;并没有销毁session;

分别通过一下语句:
  ActionContext.getContext().getSession().map.clear();//session清空
  ServletActionContext.getRequest().getSession().invalidate();//session失效
  
资料如下:

由于WebWork对request,parameter,Session和Application都进行了封装,将这些隐含的对象封装成了相应的Map,如RequestMap,ParameterMap,SessionMap和ApplicationMap,而这些Map就组成了ActionContext,因此我们通常都不再需要与request,session这些底层的对象打交道了;
事实上,对于SessionMap的处理即是对Session的处理了。我们可以通过ActionContext的静态方法getContext返回一个ActionContext的实例,然后再调用其getSession方法获得SessionMap,接着就可以利用put和get方法对session进行读写的操作了。

而在页面上,我们可以通过以下的方式对session进行操作:
 
  #session.name表示从SessionMap中取得与"name"这个key对应的对象,实际上是调用了如下的statement:ActionContext.getContext().getSession().get("name"),并且进行了类型的转换。
 
  又如:
则是在SessionMap中获得了Player对象之后,并调用类Player的getter方法:getName()获得name属性。
 
        简而言之,为了能够降低与部署环境的耦合程度,WebWork将Servlet的隐含对象进行了封装,这在很大程度上简化了开发的工作。而且WebWork也提供了类ServletActionContext,我们通过这个类中的getRequest方法获得原始的HttpServletRequest,然后就可以对request和session这些底层对象进行操作了。但是,一般情况下,利用ActionContext.getSession()可以完成几乎所有的工作了,我们又为什么要去碰那些底层的东西呢?因此我们应该优先考虑使用SessionMap,而不是底层的session。
       
        另外一个需要注意的问题,就是SessionMap和隐藏对象session的作用域是不同的。也就是说,通过 ActionContext.getContext().getSession().put("name","Fantasy Soft"),往SessionMap中写入了与"name"这个key相对应的内容,但是在页面上通过session.getAttribute("name")得到的将会是null。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/20941140/viewspace-558077/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/20941140/viewspace-558077/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值