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

有关servlet多线程的疑惑!
最近做了这样一种东西:
  客户端采用ajax方式每隔10秒钟向ActionServlet发起一次请求,servlet在session中取得当前客户的id,然后根据客户id在服务器中查看有没有该客户的消息,有的话就传回客户端。

出现了这样的问题:
  当多个客户端同时访问的时候,servlet好像分不清该请求来自哪个客户端,把不属于某个客户的消息传了回去。

  这是不是与我没有采用多线程处理有关?servlet是线程不安全的,不应当在servlet中定义全局变量,我也没有在servlet中定义全局变量啊!为什么还会出这种问题?我们老师说过:servlet的工作机制是,单实例多线程。当有新客户访问时,servlet会创建新线程处理客户端的请求。如果是这样的话,就不应当出现上面的问题吗?
  困惑中……求助!!!!!


------解决方案--------------------
理论上一个请求一个响应互不影响
没用到全局变量,用到成员变量了吗?
servlet里调用了其他类的方法了吗?怎么调用的?
servlet是自己实现service方法的吗?
------解决方案--------------------
记得哪里看到过是多线程请求,单线程处理

你的情况似乎是 session 串位了
即多个用户请求,但基本上按最后一个用户来处理...

------解决方案--------------------
检查你的关键的变量,作用域是否都是在doGet()/doPost()两个方法内部;

如果超出了这个作用域,那它就是多个用户共享的

说白了,就是你的那些变量是不是都是在这两个方法内部定义的