【问题标题】:servlet doGet and doPost methods [duplicate]servlet doGet 和 doPost 方法
【发布时间】:2012-02-27 05:40:43
【问题描述】:

我想知道在 servlet 中为什么我们在同一个程序中同时使用 doGet 和 doPost 方法。有什么用??

以下代码是什么意思?
为什么要从 doPost 调用 doGet 方法?我对这段代码一点都不清楚。

public class Info extends HttpServlet
{

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
 {

 }


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
    doGet(request, response);
}
}

谢谢

【问题讨论】:

    标签: java http jakarta-ee servlets methods


    【解决方案1】:

    正如您提到的here,您确实可以调用第三种方法,但您也可以覆盖 HttpServlet 母类中的 service() 方法,以便它调用 alawys 一个唯一的方法。

    【讨论】:

      【解决方案2】:

      这是处理两种请求类型,例如。 http的GET和POST。根据应用程序的要求,人们可能会选择将请求类型保留为 GET 或 POST,因此如果您同时处理它们,您将收到错误。如果你想以类似的方式处理它们,那么你可以创建另一个方法 doSomething 并从你的 doGet 和 doPost 方法中调用它以获取更多信息see this answer

      【讨论】:

        【解决方案3】:

        难道不是与获取请求有关吗?允许在浏览器窗口的 URL 中看到参数,并且发布请求将参数合并到请求的结构中,因此从视图中隐藏。您的请求将如何以获取或帖子的形式从客户处提出。我认为这与安全性和避免 sql 注入有关,但这并不是我真正的领域。希望一些专家能纠正我的观点/评论,因为我自己需要知道这一点。

        【讨论】:

          【解决方案4】:

          简单来说就是把servlet通用化,这样以后即使​​我们改变请求方法,也不需要编辑servlet,这样可以减少以后修改应用程序的工作量。

          【讨论】:

            【解决方案5】:

            doGet() 处理传入的 HTTP GET 请求,而 doPost() 处理... POST 请求。还有等价的方法来处理 PUT、DELTE 等。

            如果您使用 GET(默认)提交表单,则将调用 doGet()。如果您使用 POST 提交,则这次将调用 doPost()。如果你只实现doPost(),但表单会使用GET,servlet容器会抛出异常。

            在许多程序中,服务器并不关心请求是使用 GET 还是 POST,这就是为什么一种方法只是简单地委托给另一种方法的原因。这实际上是一种不好的做法,因为这些方法本质上是不同的,但是许多教程都是这样写的(无论好坏)。

            【讨论】:

            • 您何时真正想要区分 servlet 中的 get 和 post?那会是什么样的用例(或要求)?
            • GET 应该是获取资源。它必须是幂等的,并且不应该修改服务器中的任何内容。 POST 不是幂等的,用于在服务器上创建、更新或删除某些内容。当必须使用 GET 时没有理由使用 POST,而在应该使用 POST 时使用 GET 是不好的做法,如果用户刷新页面或浏览历史记录,可能会导致各种问题。通常使用 GET 显示表单,使用 POST 提交。
            • doGet() for /users 返回一个列表,doPost() for the same URL (servlet) 创建新用户。当然,我可以将这两种方法委托给一个方法,然后使用HttpServletRequest.getMethod(),但这只会使事情复杂化。
            • 谢谢大家..你的回答..我很清楚get和post之间的简单区别,但不清楚上面的代码在一个servlet代码中使用这两种方法..跨度>
            • @user460920:如果您使用 GET(默认)提交表单,将调用 doGet()。如果您使用 POST 提交,则这次将调用 doPost()。如果你只实现doPost(),但是表单会使用GET,servlet容器会抛出异常。
            猜你喜欢
            • 2011-08-18
            • 2011-01-21
            • 2011-07-09
            • 2014-06-02
            • 2014-05-23
            • 1970-01-01
            • 2015-04-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多