17.12.21
關(guān)于servlet中service、doGet撩满、doPost的關(guān)系
1僵刮、sun只是定義了servlet接口,而實(shí)現(xiàn)servlet接口的就是類似于tomcat的服務(wù)器鹦牛。這里只是介紹tomcat實(shí)現(xiàn)的servlet接口的具體實(shí)現(xiàn)。
2勇吊、service()是在javax.servlet.Servlet接口中定義的, 在 javax.servlet.GenericServlet中實(shí)現(xiàn)了這個接口曼追。
而 doGet/doPost 則是在 javax.servlet.http.HttpServlet 中實(shí)現(xiàn)的, javax.servlet.http.HttpServlet 是javax.servlet.GenericServlet 的子類。
3汉规、 在servlet中默認(rèn)情況下礼殊,無論你是get還是post 提交過來 都會經(jīng)過service()方法來處理驹吮,然后轉(zhuǎn)向到doGet
或是doPost方法。tomcat的service默認(rèn)實(shí)現(xiàn)就是根據(jù)Get晶伦、Post碟狞、Head、Put等類型自動轉(zhuǎn)向婚陪。
4族沃、我們一般會重載service方法,默認(rèn)操作被覆蓋泌参,不再進(jìn)行轉(zhuǎn)發(fā)操作脆淹!需要我們自己寫來做轉(zhuǎn)向。也可以不轉(zhuǎn)向沽一。
5盖溺、一般會在service()中實(shí)現(xiàn)對父類方法的同參數(shù)表重載,即寫上super.service(req, resp);
————————
1铣缠、session本身是屬于HTTP協(xié)議的范疇烘嘱,但是doFilter()方法中定義的是ServletRequest類型的對象,那么要想取得session蝗蛙,則必須進(jìn)行向下轉(zhuǎn)型蝇庭,將ServletRequest變?yōu)镠ttpServletRequest接口對象,才能夠通過getSession()方法取得session對象歼郭。
在實(shí)現(xiàn)filter接口的同時繼承HttpServlet遗契,在通過request過去session之前需要轉(zhuǎn)換成HttpServletRequest。