天天看點

servlet、genericservlet、httpservlet之間的差別

當編寫一個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​​;這種差別當用在密碼傳輸時就顯的更為重要。