當編寫一個servlet 時, 必須直接或間接實現 servlet 接口, 最可能實現的方法就是擴展javax.servlet.genericservlet 或 javax.servlet.http.httpservlet 當實現javax.servlet.servlet 接口時必須實現5 個方法
init(servletconfig config)
service(servletrequest req,servletresponse
resp)
destroy()
getservletconfig()
getservletinfo()
service
是執行應用邏輯的入口點,
包容器調用此方法來響應進來得請求,
只是在servlet
被成功初始化後才能調用它
其實servlet
和applet
差不多,
當一個servlet
被實例化後,
包容器自動去調用固定的方法首先是init(),
然後是service().....
genericservlet
類提供了servlet
接口的基本實現,
所以他的子類都必須實現service()
方法
httpservlet
類擴展了genericservlet
並且提供了servlet
接口中具體於http
的實現,它更象一個其他所有的servlet
都要擴展的類
,
其中他定義了兩種形式的service
方法:
service(servirequest req,servletresponse
resp)
此方法是genericservlet
的service()
方法的實現,
他把resquest,response
對象分別轉化爲 httpservletrequest
和httpservletresponse
並且調用下面重載的service()
方法,
所以不應當重載上面的 service()
方法:
protect void service(httpservirequest
req,httpservletresponse resp)
他用http
的request,response
對象作爲參數,
並且由上面的方法調用,httpservlet
實現這個方法後就成爲一個http
請求的分發者,
他把請求代理給doget(),dopost().....
等doxxxx()
方法
當包容器爲一個servlet
收到一個請求時,
包容器調用公共的service
方法在把參數轉換爲 httpservirequest,httpservletresponse
後,
這個公共的方法調用保護的service
根據http
請求方法的類型,
保護的service
方法調用doxxxx()
方法之一.
doget()
方法是當得到一個get
類型的請求時調用
dopost()
方法是當得到一個post
類型的請求時調用
httpservlet
是從genericservlet
繼承而來,因此httpservlet
也有init
和destroy
這兩個生命週期函數以及service
方法,只是 httpservlet
還有兩個重要的dopost
方法和doget
方法,並用他們來支持http
的post
和get
方法,就是說如果要支持http
的 get
方法,就要覆蓋doget
方法,如果要支持http
的post
方法,就要覆蓋dopost
方法。而get
方法和post
方法的主要區別在於:
post
方法的數據傳遞方式比較安全,不會將傳遞的信息顯示在瀏覽器的網址後,而get
方法則會將傳遞的信息顯示在瀏覽器的網址後
,例如用get
方法的瀏覽器網址:http://127.0.0.1:8080/response.jsp?name=myself
;而用post
方法則爲:http://127.0.0.1:8080/response.jsp
;這種區別當用在密碼傳輸時就顯的更爲重要。