在Java Web开发中,一个经典的问题经常被提及:当多个用户并发访问同一个Web应用时,Servlet是如何处理这些复杂请求的?
答案非常直接——Servlet默认采用“单实例,多线程”的运行机制。换句话说,只要Web应用成功部署到容器中,Servlet只会在启动时被实例化一次,随后便长期驻留在内存中。它的生命周期极长,只有当项目从容器中完全移除(例如卸载)或整个服务器关闭时,才会被销毁。因此,从项目发布到运行结束,整个Web应用里的每个Servlet都仅对应一个实例对象。
那么,当多个请求同时到达时,Servlet究竟如何应对?关键在于Web容器内部的线程池(例如Tomcat的ThreadPool)。容器会为每个请求分配一个独立的线程,而这些线程会共享同一个Servlet实例。我们来看一下Tomcat 7.0.3中server.xml里的相关配置示例:
1
