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