servlet的運行工作

我是一個剛學幾天的小白,寫得不好,如果哪個地方有錯誤,歡迎你們指出。

在服務器端,我用的是Tomcat作爲Servlet 容器,在容器中有一個Servlet接口,你編寫一個servlet類放在Tomcat中,當你在瀏覽器中訪問這個servlet的URL時,在這裏假設你訪問的是存在的servlet,我們都知道接下來就是WEB容器會解析請求,創建servlet 實例,然後調用service( )方法,然後把響應結果發送給瀏覽器,具體過程可以通過一些資料得知,我接下來要寫的是我自己的一些迷惑和理解。

我是在eclipse ee 搭建Tomcat,然後創建一個項目,創建一個serlet類,在該servlet類中,你只看到無參構造方法、doGet()和doPost( )方法,並沒有service( )方法,那麼上面所說的調用service( )方法是什麼意思呢?

 

其實通過eclipse 提供的servlet類模板,可以看到你所編寫的servlet類是繼承了HttpServlet類,而HttpServlet類是GenericServlet類的子類,GenericServlet類實現了Servlet容器中的Servlet接口,在Servlet接口中,就定義了service( )方法,這個方法是要由Servlet 容器來調用的,GenericServlet類實現該接口,由GenericServlet類的源碼可看出,GenericServlet類並沒有實現Service( )方法,而service()方法也成爲了GenericServlet類中唯一的抽象方法,(GenericServlet類是抽象類),所以GenericServlet類的具體子類必須實現該方法,而HttpServlet是GenericServlet類的子類,所以在HttpServlet類中,由源碼可知HttpServlet實現了Servlet接口中的service()方法,並且重載了該方法,重載後的該方法,會根據獲得的客戶端請求方式來調用匹配的服務方法,如果是Get方法,則調用doGet()方法,如果是Post方法,則調用doPost()方法,我們創建的servlet類繼承了HttpServlet類,並且重載了doGet()和doPost(),這可以說是一種封裝思想吧,你並不需要去修改service()方法,你只需要根據需要去修改doGet()和doPost()方法,通過源碼,我們可以知道在HttpServlet中,有兩個service()方法,第一個是實現了Servlet接口的service()方法,第二個則是重載service()方法,在第一個srevice()方法調用了重載的service()方法,重載的service()方法的功能,上面已經說過了,就是判斷要調用哪個方法,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章