GenericServlet
1). GenericServlet是一個(gè)Servlet.是Servlet接口和ServletConfig接口的實(shí)現(xiàn)類媳搪,但是一個(gè)抽象類邑彪,其中的service()方法為抽象方法瞧毙。
2). 如果新建的Servlet程序直接繼承GenericServlet會(huì)是開發(fā)更簡(jiǎn)潔。
3). 在GenericServlet中聲明了一個(gè)ServletConfig類型的成員變量,在init(ServletConfig)方法中對(duì)其進(jìn)行了初始化宙彪。
4). 利用servletConfig成員變量的方法撑柔,實(shí)現(xiàn)了ServletConfig接口的方法。
5). 還定義了一個(gè)init()方法您访,在init(ServletConfig)方法中對(duì)其進(jìn)行調(diào)用,子類可以直接覆蓋init()方法剪决,在其中實(shí)現(xiàn)Servlet的初始化灵汪,不建議直接覆蓋init(ServletConfig),因?yàn)槿绻浘帉憇uper.init(ServletConfig)柑潦,而還使用了ServletConfig接口的方法享言,則會(huì)出現(xiàn)空指針異常。
6). 新建的init(){}并非Servlet的生命周期方法渗鬼,而init(ServletConfig)是生命周期方法览露。
HttpServlet
1). 是一個(gè)Servlet,繼承自GenericServlet譬胎,針對(duì)HTTP協(xié)議所定制差牛。
2). 在service()方法中直接把ServletRequest和ServletResponse轉(zhuǎn)為HttpServletRequest和HttpServletResponse,并調(diào)用了重載的service(HttpServletRequest, HttpServletResponse)
在service(HttpServletRequest, HttpServletResponse)獲取了請(qǐng)求方式:request.getMethod()
根據(jù)請(qǐng)求方式有創(chuàng)建了doXxx()方法(xxx 為具體的請(qǐng)求方式)
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest) req;
response = (HttpServletResponse) res;
} catch (ClassCastException e) {
throw new ServletException("non-HTTP request or response");
}
service(request, response);
}
}
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getMethod();
if("GET".equalsIgnoreCase(method)){
doGet(request,response);
}
if("POST".equalsIgnoreCase(method)){
doPost(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException{
}
3).實(shí)際開發(fā)中堰乔,直接繼承HttpServlet偏化,并根據(jù)請(qǐng)求方式覆寫doXxx()方法接口。
4). 好處:直接有針對(duì)性的覆蓋doXxx()方法镐侯。直接使用HttpServletRequest和HttpServletResponse侦讨,不在需要進(jìn)行強(qiáng)轉(zhuǎn)