Web应用及Servlet模型

来源:互联网 发布:突厥 唐太宗 知乎 编辑:程序博客网 时间:2024/05/18 21:07

      前些天被人问起同一个Web应用里可不可以配置servlet-name及url-pattern不同,但servlet-class相同的多个Servlet,今天特地做了个测试,在同一个Web应用里配置了两个这样的Servlet,它们都可以正常运行,互相之间也没有干扰。

      我们都知道Servlet是多线程共享单实例的模型,不过上面这种情况下,Web容器会为这两个Servlet生成两个实例还是仅仅只生成一个实例呢?在jdk 1.5.0_06及Tomcat 5.0.28下测试发现Web容器还是为这两个Servlet分别生成了各自的实例,也就是说Web容器会为每个Servlet生成相应的实例,即使这些Servlet的servlet-class都相同。

      另外,还有人问过我,如果部署在同一个JVM下的多个Web应用中都可以访问并修改某个类的静态变量,这样会不会引发多个Web应用之间的冲突呢?据我所知,在同一个JVM下,通常Web服务器会对不同的Web应用使用不同的classloader,而不同的classloader装载的类型会处于不同的空间中,也就是说即便有几个classloader都装载了类型A,这几个被装载的A也是互不知情的。所以即便同一个JVM下的多个Web应用中都可以访问并修改某个类的静态变量,那其实它们修改的也是同名但处于不同空间下的类的静态变量,并不会引发多个Web应用之间的冲突。

原创粉丝点击