serlvet是单实例多线程的。
只要在Servlet里面的任何方法里面都不使用实例变量,那么该Servlet就是线程安全的。 

解决方案 »

  1.   

    咋乱套??你发送数据/接收数据是你的session,别人有别人的session,不会乱套的
      

  2.   

    我不是说客户端提交的数据乱套,而是如果servlet中定义了一些变量或属性,那它反正只实例化一次,只有一个对象,来自不同客户端的不同的请求操作相同的一个对象,这安全?
      

  3.   

    Servlet只实例化一次  没错,
    用的是方法, 方法没有参数的吗?参数不能变的吗?
      

  4.   

    文不对题。来自客户端的不同请求被包装成不同的ServletRequest,传入service方法,这我知道。但是怎么保证servlet的实例变量是线程安全的?只能人为控制(在Servlet里面的任何方法里面都不使用实例变量)?
      

  5.   

    说到线程,我还没研究到。
    不过HttpServlet  一般处理一下方法:
    doGet(HttpServletRequest req, HttpServletResponse resp) 
    doHead(HttpServletRequest req, HttpServletResponse resp) 
    doPost(HttpServletRequest req, HttpServletResponse resp) 
    再说,默认那构造函数是空的。
      

  6.   

    在 servlet 的类里不要定义与会话相关的变量,所有与会话相关的变量都要定义在service方法里,或者放在 doGet, doPost 这些方法内部,作为局部变量public class MyServlet implements Servlet {
        private String a; // 线程不安全
        public void service(......){
            String b = ...... // 线程安全
        }
    }
      

  7.   

    Servlet 本身是无状态的,所以不会乱套,你要是硬让Servlet 保存状态,那就要自己做好同步了!