HttpServlet Service方法

service() 方法是执行实际任务的主要方法。Servlet 容器(即 Web 服务器)调用 service() 方法来处理来自客户端(浏览器)的请求,并把格式化的响应写回给客户端。

每次服务器接收到一个 Servlet 请求时,服务器会产生一个新的线程并调用服务。service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。

下面是该方法的特征:

public void service(ServletRequest request, 
                    ServletResponse response) 
      throws ServletException, IOException{
}

service() 方法由容器调用,service 方法在适当的时候调用 doGet、doPost、doPut、doDelete 等方法。所以,您不用对 service() 方法做任何动作,您只需要根据来自客户端的请求类型来重写 doGet() 或 doPost() 即可。

/*     */   protected void service(HttpServletRequest req, HttpServletResponse resp)
/*     */     throws ServletException, IOException
/*     */   {
/* 568 */     String method = req.getMethod();
/*     */     
/* 570 */     if (method.equals("GET")) {
/* 571 */       long lastModified = getLastModified(req);
/* 572 */       if (lastModified == -1L)
/*     */       {
/*     */ 
/* 575 */         doGet(req, resp);
/*     */       } else {
/* 577 */         long ifModifiedSince = req.getDateHeader("If-Modified-Since");
/* 578 */         if (ifModifiedSince < lastModified / 1000L * 1000L)
/*     */         {
/*     */ 
/*     */ 
/* 582 */           maybeSetLastModified(resp, lastModified);
/* 583 */           doGet(req, resp);
/*     */         } else {
/* 585 */           resp.setStatus(304);
/*     */         }
/*     */       }
/*     */     }
/* 589 */     else if (method.equals("HEAD")) {
/* 590 */       long lastModified = getLastModified(req);
/* 591 */       maybeSetLastModified(resp, lastModified);
/* 592 */       doHead(req, resp);
/*     */     }
/* 594 */     else if (method.equals("POST")) {
/* 595 */       doPost(req, resp);
/*     */     }
/* 597 */     else if (method.equals("PUT")) {
/* 598 */       doPut(req, resp);
/*     */     }
/* 600 */     else if (method.equals("DELETE")) {
/* 601 */       doDelete(req, resp);
/*     */     }
/* 603 */     else if (method.equals("OPTIONS")) {
/* 604 */       doOptions(req, resp);
/*     */     }
/* 606 */     else if (method.equals("TRACE")) {
/* 607 */       doTrace(req, resp);
/*     */ 
/*     */ 
/*     */     }
/*     */     else
/*     */     {
/*     */ 
/*     */ 
/* 615 */       String errMsg = lStrings.getString("http.method_not_implemented");
/* 616 */       Object[] errArgs = new Object[1];
/* 617 */       errArgs[0] = method;
/* 618 */       errMsg = MessageFormat.format(errMsg, errArgs);
/*     */       
/* 620 */       resp.sendError(501, errMsg);
/*     */     }
/*     */   }
原文地址:https://www.cnblogs.com/kakaisgood/p/6692566.html