面試java后台時,那些面試官會問servlet周期。
servlet有三個周期:
1、初始化:調用init()方法
2、響應客戶需求:調用service()方法
3、銷毀:調用destory()方法
面試官又問什么時候調用init()方法(之前用servlet時沒想過這個問題,后來查了資料,自我理解如下):
servlet中的init()使用方式:希望在servlet首次載入時,執行復雜的初始化任務,但並不想每個請求都重復這些任務的時候,用init()方法他在servlet初次創建時被調用,之后處理每個用戶的請求時,則不在調用這個方法。因此,他主要用於一次性的初始化,和applet的init方法相同。
由於servlet初始化參數的使用非常依賴於部署描述文件(web.xml),該文件可存放servlet所需要的起始參數以及web應用程序的結構數據。當servlet容器讀取web.xml文件內容后。可以將這些起始參數封裝成一個對象並在調用init方法時傳遞個servlet,這個對象就是ServletConfig對象所以我們可以在Servlet內覆寫init方法,並通過ServletCongig對象來取得某些初始參數。
以init參數的名稱為參數,調用ServletConfig的getInitParameter方法。返回值就是init參數的值。 簡單來說,就是,只在該servlet首次調用時運行一次,之后不在運行,也就談不上釋放了。
分別調用三個方法是什么時候:
Servlet被服務器實例化后,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷毀的時候調用其destroy方法。
Eclipse中servlet顯示無法導入javax.servlet包問題的解決方案
今天用struts寫一個小小的web服務器,可是發現只要是引入javax.servlet里的內容時,都會出錯,比如:
import javax.servlet.Filter;提示:The import javax.servlet.Filter cannot be resolved 等等。
在網上找了好久,發現是jdk 里不包括servlet-api.jar 這個包,於是到tomcat里找到這個包復制到 jdk\jre\lib 下
再設置classpath,結果還是無濟於事,后來發現是工程里的路徑權限高,並且eclipse並到classpath里尋找jar位置,所以我就到我的java項目里
項目名-->右鍵
Property-->選擇
Java Build Path-->選擇
Add External JARs-->選擇
把servlet-api.jar的路徑輸入即可 該包在tomcat里有 搜索即可找到