解决方案 »

  1.   

    做一个判断试试不为null的时候执行
      

  2.   

    有一点本人必须声明,此段代码仅仅是测试所用。我要清除的东西不是保存在Session中的帐号信息,而是保存在Session中的手机短信验证码(帐号信息 可在web.xml 中设置session-timeout来清除,而为了保证安全性,手机短信验证码只能用定时器清除)。
      

  3.   

    request 是怎么来的,请求来的么,生命周期多少,session是客户端回话产生的,
      

  4.   

    我反复测试,发现reqesut只能在同一个类的方法之间互相传递,不能在类和类之间传递。否则就回出现reqesut.getSession()为NULL的问题
      

  5.   

    我反复测试,发现reqesut只能在同一个类的方法之间互相传递,不能在类和类之间传递。否则就会出现request.getSession()为NULL的问题
      

  6.   

    最后,我发现,不能把reqesut传入定时器。因为reqesut在类和类之间传递之后 就不能getSession()了(内部类之间传递也不行)。所以,若是想定时清除session,直接传递session就可以了,不要传reqesut!最后,这段代码应该这样写。
      

  7.   

    应该不是类与类的问题,确切的说应该是请求与请求之间的问题,Spring mvc提供了Session的相关操作方式
      

  8.   

    本来就该直接传session 。。因为session是存活在一个对话期的 ,而request是存活在一次 请求中的 。。楼主那样传request实际上已经 脱离了它生命周期
      

  9.   


    完全是瞎扯,在request生命周期没有结束之前类和类之间随便玩。你这个是因为在TimerTask的新线程里reqesut生命周期早就结束了(请求别告诉我你不知道啊,请求完毕就结束了),你得到的东西当然是空。而session的生命周期是整个回话过程,就算请求结束了,会话不结束也是存在的。
      

  10.   

    而且就算你传session,也是有问题的。要是你session的超时时间小于你定时的时间,在你定时触发以前session就结束了,也就是null了,你定时器在运行的时候一样会异常。我不知道这种方式是谁设计的,漏洞太多,到后期自己挖坑自己填吧。
      

  11.   

    一般传的话,都是传session吧,request只是一次请求中传递
      

  12.   


    完全是瞎扯,在request生命周期没有结束之前类和类之间随便玩。你这个是因为在TimerTask的新线程里reqesut生命周期早就结束了(请求别告诉我你不知道啊,请求完毕就结束了),你得到的东西当然是空。而session的生命周期是整个回话过程,就算请求结束了,会话不结束也是存在的。你说得对,因为线程延迟了操作,等我要操作request的时候,请求早结束了。所以才出现request.getSession()为Null的问题。
      

  13.   

    非常准确,先把概念行设计弄清楚。request 完成之后就消失了,就算你还看到它,但服务器并不保证它的状态依然是正确的,因为与服务器关联的东西已经不一致了(服务器已经销毁了关联的状态)。就算你的代码在 tomcat 上能工作也不代表它在 jboss 上还能工作,因为这段代码本身就不符合设计要求。