Servlet是如何工作的?
了解servlet如何工作對了解servlet內(nèi)部工作流程很重要。 在這里,我們將以第一個servlet程序來講解它的內(nèi)部細(xì)節(jié)。
服務(wù)器檢查servlet是否為第一次被請求?
如果是第一次被請求,則 -
init方法傳遞ServletConfig對象如果不是第一次被請求,則 -
service方法傳遞請求和響應(yīng)對象Web容器在需要刪除servlet時調(diào)用destroy方法,例如:在停止服務(wù)器或取消部署項(xiàng)目時。
Web容器如何處理servlet請求?
Web容器負(fù)責(zé)處理請求。下面來看看看它如何處理請求。
service方法service方法內(nèi)部調(diào)用受保護(hù)的service方法service方法根據(jù)請求的類型調(diào)用doGet方法。doGet方法生成響應(yīng),并將其傳遞給客戶端。在公共service方法中寫什么?
公共service方法將ServletRequest對象轉(zhuǎn)換為HttpServletRequest類型和ServletResponse對象轉(zhuǎn)為HttpServletResponse類型。然后調(diào)用傳遞這些對象的service方法。下面來看看內(nèi)部代碼:
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);
}
在受保護(hù)的service方法中編寫什么?
受保護(hù)的service方法檢查請求的類型,如果請求類型為get,則調(diào)用doGet方法,如果請求類型為post,則調(diào)用doPost方法。下面來看看內(nèi)部代碼:
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
String method = req.getMethod();
if(method.equals("GET"))
{
long lastModified = getLastModified(req);
if(lastModified == -1L)
{
doGet(req, resp);
}
....
//rest of the code
}
}