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

Servlet只实例化一次,那不同用户访问,数据岂不乱套了?
书上说不管客户端多少次请求,服务器端的Servlet只实例化一次,那不同用户访问,数据岂不乱套了?
我是初学者。
------解决方案--------------------
serlvet是单实例多线程的。
只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。 
------解决方案--------------------
不要牵涉私有属性,不要涉及全局变量即可,就是线程安全的
------解决方案--------------------
说到线程,我还没研究到。
不过HttpServlet  一般处理一下方法:
doGet(HttpServletRequest req, HttpServletResponse resp) 
doHead(HttpServletRequest req, HttpServletResponse resp) 
doPost(HttpServletRequest req, HttpServletResponse resp) 
。。。。。。

再说,默认那构造函数是空的。
------解决方案--------------------
在 servlet 的类里不要定义与会话相关的变量,所有与会话相关的变量都要定义在service方法里,或者放在 doGet, doPost 这些方法内部,作为局部变量

public class MyServlet implements Servlet {
    private String a; // 线程不安全
    public void service(......){
        String b = ...... // 线程安全
    }
}
------解决方案--------------------
Servlet 本身是无状态的,所以不会乱套,你要是硬让Servlet 保存状态,那就要自己做好同步了!
------解决方案--------------------
楼上正解.....