1:实例数量
一般容器会为每个servlet分配一个实例,但是如果servlet实现了SingleThreadModel,容器可以选择分配多个实例
SigleThreadModel保证每个一个特定servlet实例的service方法一个时刻只能被一个线程执行
由于HttpSession属于会话跟踪对象,因此多个servlet可能共享一个HttpSession,包括那些实现了SingleThreadModel接口的servlet
2:生命周期
类加载,实例化,初始化,处理请求,销毁
其中加载,实例化有servlet容器来完成、
3:容器采用多个线程访问单个servlet实例的方式来运行,在Tomcat中可以通过配置<Connector>来指定一个实例可以同时被几个线程访问
4:开发安全的servlet
<1> 变量的线程安全性
a:多使用局部变量
b:使用同步块synchronized,防止发生的异步调用的代码块
<2> 属性的线程安全性 ServletContext, HttpSession, ServletRequest
前两个是线程不安全的,需要使用同步来防止异步调用,只有ServletRequest属于线程安全
<3> 使用SingleThreadModel
一般容器会为每个servlet分配一个实例,但是如果servlet实现了SingleThreadModel,容器可以选择分配多个实例
SigleThreadModel保证每个一个特定servlet实例的service方法一个时刻只能被一个线程执行
由于HttpSession属于会话跟踪对象,因此多个servlet可能共享一个HttpSession,包括那些实现了SingleThreadModel接口的servlet
2:生命周期
类加载,实例化,初始化,处理请求,销毁
其中加载,实例化有servlet容器来完成、
3:容器采用多个线程访问单个servlet实例的方式来运行,在Tomcat中可以通过配置<Connector>来指定一个实例可以同时被几个线程访问
4:开发安全的servlet
<1> 变量的线程安全性
a:多使用局部变量
b:使用同步块synchronized,防止发生的异步调用的代码块
<2> 属性的线程安全性 ServletContext, HttpSession, ServletRequest
前两个是线程不安全的,需要使用同步来防止异步调用,只有ServletRequest属于线程安全
<3> 使用SingleThreadModel