當第一次請求一個servlet資源時,servlet容器創建這個servlet實例,並調用他的
init(ServletConfig config)做一些初始化的工作,然後調用它的service方法處理請求。當第二次請求這個servlet資源時,servlet容器就不在創建實例,而是直接調用它的service方法處理請求,也就是說servlet對象是常駐內存的,是單例,因此不要把一些屬性作爲servlet的成員變量,避免併發訪問問題,當servlet容器關閉或者重新加載web應用時,servlet會調用它的destory()方法,然後就就結束了。
2 filter ,Listener
當web容器啓動的時候,去讀取每個web應用的web.xml配置文件,當配置文件中配有filter和listener時,web容器實例化listener,filter,然後調用Filter的init(FilterConfig)方法做一些初始化(注意當我們的filter啓動錯誤時,這個web應用將
不能用),當請求一個資源而這個資源正好被這個過濾器過濾,調用filter的doFilter方法,當servlet容器關閉或者重新加載web應用時,filter會調用它的destory()方法,然後銷燬這個對象,listener是當某個事件發生時,調用它特定法,HttpSessionListener
,當創建一個session時會調用它的sessionCreated()方法,當servlet容器關閉或者重新加載web應用時lister對象被銷燬。
總之,servlet filter listener 都是單例的,就是說在運行時只存在一個實例。
原文鏈接:http://yun342173024.iteye.com/blog/1635113