doGet调用doPost或反之亦然

时间:2014-02-20 17:59:03

标签: java jsp java-ee servlets

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

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.
}

的问题:

  1. 为什么doPost无法拨打doGet
  2. flow control的含义是什么?

4 个答案:

答案 0 :(得分:2)

该示例表示所有请求是GET还是POST将由单个方法处理。您可以将doPost代码移至{{1}并且从doGet调用doGet方法,thr将没有问题。

答案 1 :(得分:1)

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

理想情况下,预处理任务必须以doGet()方法完成。例如,假设您要在将请求转发到用户主页之前验证用户已登录或未登录的位置,那么您将在doGet()方法中执行此操作。虽然后处理任务必须在doPost()中完成。例如,当用户提交表单时,您希望获取表单中的值,并验证它们。这种逻辑采用doPost()方法。

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

答案 2 :(得分:1)

我知道它已经过时了,但仍然......

关于第一季度,每个人都给出了一个非常有趣和准确的答案,但事实就在那里......只要看看这个“缩小”的代码,你就会明白:

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调用调用doGet的doPost ......

答案 3 :(得分:1)

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

protected void service((HttpServletRequest req, HttpServletResponse resp) throws  ServletException, IOException { 
     //do something you need
}