• servlet中service doGet doPost 的关系


    在servlet中默认情况下,无论你是get还是post 提交过来都会经过service()方法来处理,然后转向到doGet

    或是doPost方法,可以看HttpServlet 类的service方法:

    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);
    } else
    {
    long ifModifiedSince = req.getDateHeader("If-Modified-Since");
    if(ifModifiedSince < (lastModified / 1000L) * 1000L)
    {
    maybeSetLastModified(resp, lastModified);
    doGet(req, resp);
    } else
    {
    resp.setStatus(304);
    }
    }
    } else
    if(method.equals("HEAD"))
    {
    long lastModified = getLastModified(req);
    maybeSetLastModified(resp, lastModified);
    doHead(req, resp);
    } else
    if(method.equals("POST"))
    doPost(req, resp);
    else
    if(method.equals("PUT"))
    doPut(req, resp);
    else
    if(method.equals("DELETE"))
    doDelete(req, resp);
    else
    if(method.equals("OPTIONS"))
    doOptions(req, resp);
    else
    if(method.equals("TRACE"))
    {
    doTrace(req, resp);
    } else
    {
    String errMsg = lStrings.getString("http.method_not_implemented");
    Object errArgs[] = new Object[1];
    errArgs[0] = method;
    errMsg = MessageFormat.format(errMsg, errArgs);
    resp.sendError(501, errMsg);
    }
    }
    从上面可以看出 这里的service是用来转向的,但是如果你在自己的servlet类中覆盖了service方法,比如说你的service是这样的:
    public void service(ServletRequest req, ServletResponse res)
    throws ServletException, IOException {
    res.getOutputStream().print(
    "image is <img src='images/downcoin.gif'></img><br>");
    }

    那么这时service就不是用来转向的,而是用来处理业务的,现在不论你的客户端是用pos还是get来请求此servlet
    都会执行service方法也只能执行servlet方法,不会去执行doPost或是doGet方法。

  • 相关阅读:
    wikioi 1514 and ZJOI2006 书架
    HDU 4762 Cut the Cake(公式)
    HDU 4762 Cut the Cake(公式)
    呵呵,cnblog排名进4000了,留念一下!
    呵呵,cnblog排名进4000了,留念一下!
    电子书下载:C# Database Basics
    电子书下载:C# Database Basics
    (原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)
    (原創) 如何在Nios II顯示8位數的七段顯示器? (SOC) (Nios II) (SOPC Builder) (DE2-70)
    部署GlusterFS及Heketi
  • 原文地址:https://www.cnblogs.com/canceler/p/4676754.html
Copyright © 2020-2023  润新知