关于servlet的实例化
看项目的源码,只能看到servlet有多少个方法,其实现类也没有进行实例化或者调用init的方法,感觉很奇怪。
后面看到一篇文章,介绍tomcat的源码才知道servlet的实例化是再tomcat中。
主要是这个类:org.apache.catalina.core.StandardWrapper
其中主要是判断servlet是否实例化过,这个方法加了锁,如果有,则返回当前实例,所以,servlet是是非线程安全的,如果有多个线程使用这个servlet,就需要小心了。
tomcat是servlet的容器,tomcat启动后,加载容器内的所有应用。当一个应用被加载时,servlet容器会创建一个ServletContext,然后将它放在内存中(即只有一个实例,不会过期),然后加载每个应用的web.xml文件,根据配置,实例化servlet。
将他们放在server的内存中。在创建的时候,init()方法会被调用,应用退出,则调用destory()方法。