Java doGet调用doPost,反之亦然

Java doGet调用doPost,反之亦然,java,jsp,jakarta-ee,servlets,servlet,Java,Jsp,Jakarta Ee,Servlets,Servlet,我从一本书中带来了这个例子: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException ServletOutputStream out = resp.getOutputStream(); out.setContentType(“text/html”); out.println("<html><h1>Ou

我从一本书中带来了这个例子:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
  ServletOutputStream out = resp.getOutputStream();
  out.setContentType(“text/html”);
  out.println("<html><h1>Output to Browser</h1>");
  out.println("<body>Written as html from a Servlet<body></html>");
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
  doPost(req, resp); //call doPost() for flow control logic.
}
protectedvoiddopost(HttpServletRequest-req、HttpServletResponse-resp)
抛出ServletException、IOException
ServletOutputStream out=resp.getOutputStream();
out.setContentType(“text/html”);
out.println(“输出到浏览器”);
println(“从Servlet编写为html”);
}
受保护的无效数据集(HttpServletRequest-req、HttpServletResponse-resp)
抛出ServletException、IOException
doPost(请求、响应)//为流控制逻辑调用doPost()。
}
问题:

  • 为什么
    doPost
    不能调用
    doGet
  • 流量控制
    是什么意思

  • 该示例表示所有请求,无论是
    GET
    还是
    POST
    ,都将由单个方法处理。您可以将
    doPost
    代码移动到
    doGet
    并从
    doPost
    调用
    doGet
    方法,thr不会有问题。

    这个例子意味着所有的请求,无论是
    GET
    还是
    POST
    ,都将由单个方法处理。您可以将
    doPost
    代码移动到
    doGet
    并从
    doPost
    调用
    doGet
    方法,thr将不会有问题。

    您可以调用
    doGet()
    来自
    doPost()
    ,反之亦然。没有问题。但是,你不应该做这样的事情。这两种方法有不同的目的

    理想情况下,预处理任务必须在
    doGet()方法中完成。例如,假设您希望在将请求转发到用户主页之前,验证用户登录的位置,您将在
    doGet()
    方法中执行此操作。而后处理任务必须在
    doPost()
    中完成。例如,当用户提交表单时,您希望获取表单中的值,并对其进行验证。这样的逻辑进入
    doPost()
    方法

    你不应该把它们混在一起。如果它们是相同的,就不需要两种方法。有关这些方法的更多详细信息,请参阅我们的标记wiki。

    您可以从
    doPost()
    调用
    doGet()
    ,反之亦然。没有问题。但是,你不应该做这样的事情。这两种方法有不同的目的

    理想情况下,预处理任务必须在
    doGet()方法中完成。例如,假设您希望在将请求转发到用户主页之前,验证用户登录的位置,您将在
    doGet()
    方法中执行此操作。而后处理任务必须在
    doPost()
    中完成。例如,当用户提交表单时,您希望获取表单中的值,并对其进行验证。这样的逻辑进入
    doPost()
    方法


    你不应该把它们混在一起。如果它们是相同的,就不需要两种方法。有关这些方法的更多详细信息,请参阅我们的标记wiki。

    我知道它很旧,但仍然

    关于Q1,每个人都给出了一个非常有趣和准确的答案,但真相就在那里。。。只要看看这个“缩小”的代码,您就会明白:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp){
      doPost(req, resp);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp){
      //
      //Do something
      //
      //Can I call doGet() ?
    }
    

    是的,如果你这样做,这是一个无限循环:doPost调用doGet调用doPost调用doGet…

    我知道它很旧,但仍然

    关于Q1,每个人都给出了一个非常有趣和准确的答案,但真相就在那里。。。只要看看这个“缩小”的代码,您就会明白:

    protected void doGet(HttpServletRequest req, HttpServletResponse resp){
      doPost(req, resp);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp){
      //
      //Do something
      //
      //Can I call doGet() ?
    }
    

    是的,如果你这样做,这是一个无限循环:doPost调用doGet调用doPost调用doGet…

    如果你需要doGet调用doPost,那么最好使用“服务”


    如果您需要doGet调用doPost,那么最好使用“服务”


    作者可以让doPost调用doGet,也可以让doGet调用doPost,因为这两者都是为了完成相同的任务。作者可以让doPost调用doGet,也可以让doGet调用doPost,因为两者都是为了完成相同的任务。他或她选择哪一个都没有区别。@jgitter-hehhe它的ohkdear@jgitter呵呵,呵呵,亲爱的