【问题标题】:When to use doGet, doPost and service [duplicate]何时使用 doGet、doPost 和 service [重复]
【发布时间】:2013-06-29 09:45:56
【问题描述】:

我想知道这些 servlet 方法。我对这些方法有所了解,例如

  • doPost 对参数编号没有限制,而 doGet 有。
  • doGetdoPost 快​​。
  • doPostdoGet 更安全。

我的问题是,因为这些方法采用相同的参数并执行我们实施的过程。那么这些方法和At which specific situation each of this method is used to process之间的major difference是什么。

【问题讨论】:

  • 但是我们应该从哪里获得每日 UP 的照片呢?
  • @AshishAggarwal 如果谷歌有所有的答案,那么 SO 就不会在这里开花了。
  • 事实上,无论如何,谷歌经常会导致 SO anwers

标签: java jakarta-ee servlets


【解决方案1】:

我认为你应该阅读一些有关 HTTP 的 GET 和 POST 方法的内容。例如,您可以开始 here。您的问题实际上与 Java 和 Servlet 无关,而是与 Web 编程的基础知识有关。

【讨论】:

    【解决方案2】:

    您提到了技术上的差异,还有一部分我们在谈论 REST 元数据。

    除了 POST 和 GET,还有 PUT 和 DELETE。您应该使用 GET 进行不更改数据的操作,使用 POST 创建数据,使用 PUT 更新数据。 DELETE 显然是为了删除数据。

    【讨论】:

      【解决方案3】:

      GET 应该是幂等的,POST 可能不是。 GET 是当你想从服务器获取东西时,POST 是向服务器发布数据。 GET 是幂等的,意味着多次应用相同的操作会产生相同的结果,而与 POST 一样,它具有导致不同输出的副作用。您可以编写一个非幂等的 GET ,但这违反了惯例,您最终可能会遇到问题。 GET 请求可以添加书签。 POST 无法添加书签。查询参数应该限制在GETPOST你甚至可以发送文件上传。

      【讨论】:

      • 他们不是。这只是惯例。
      • 一切都是约定,您应该进行相应的编码。应该教育人们遵守惯例,不要乱砍乱砍给自己惹上麻烦。
      • @schlingel,这就是 TheNewIdiot 使用“应该”和“可能”这两个词的原因,他没有说“必须”
      • 首先:不,并非一切都是约定俗成的。其次:当你没有提到任何约定时,我写了我的评论。只有一句话说 GET 是幂等的 POST 不是。尽管如此:你说得对,人们应该知道约定,但现在他们也应该知道它是约定。
      【解决方案4】:

      doGet() 和 doPost() ,doPut(),doDelete() 在不同场合调用,有一些细微差别。

      是的W3C given some specifications

      GET:

      对象的表示被传输到客户端。 一些 URI 指的是对象的特定变体,而一些 URI 指的是具有许多变体的对象。在后一种情况下,可以在请求头字段中指定可接受的表示、编码和语言,并可能影响返回的特定值。

      POST

      此 HTTP 方法创建一个新对象,该对象链接并从属于指定对象。新对象的内容包含在请求正文中。

      service()方法接收来自公共服务方法的标准HTTP请求,并将它们分派给该类中定义的doXXX方法。

      【讨论】:

        【解决方案5】:

        我将只关注差异:

        doService():当你知道你在做什么时使用它,默认实现调用 doGet() 或 doPost() 所以如果你覆盖它,你不会调用另一个方法。

        doGet():按照惯例,方法 GET 不应更改应用程序的内部状态(不应进行更新等)

        doPost():按照惯例,POST 用于修改应用程序的内部状态(执行插入、更新、删除)

        【讨论】:

          【解决方案6】:

          doGet():> 我们将用于静态内容,当我们使用它时,我们的请求参数通过http包头。或者http包头的大小是固定的。所以只能发送有限的数据。或者 doGet() 请求参数显示在地址栏中,或者在网络数据中像平面文本一样发送。

          doPost():>我们将用于动态内容,当我们使用它时,我们的请求参数通过http包体。或者http包体的大小不固定。因此可以发送无限数据。或者如果 doPost() 请求参数没有显示在地址栏中,或者在网络数据中像加密文本一样发送。

          service():> 如果我们定义它,那么我们必须面对服务器连接问题,因为它独立于协议,所以它不是一个好方法。

          【讨论】:

            【解决方案7】:

            我想知道这些 servlet 方法。我对这些方法有所了解,例如

            • do Post 对参数编号没有限制,而 doGet 有。

            • doGet 比 doPost 快。

            • doPost 比 doGet 更安全

            【讨论】:

              【解决方案8】:

              Servlet 容器调用服务方法来处理请求并以正确的响应进行回复。每次发出请求时都会调用服务方法。我们从不覆盖它,因为它已经在以下方面完成了:

              • doGet()
              • doPost()

              doGet() - 它请求信息。它不会更改服务器中的任何内容。 doGet() 方法是默认的 HTTPServletRequest 方法。

              doPost() - 用于提供服务器所需的信息。

              我只是写了基本的区别,剩下的还有其他的性能基础区别。

              【讨论】:

                【解决方案9】:

                简单来说..get 将在您想从服务器获取某些内容并且您的请求中没有可用的敏感信息时使用,因为它的标头在 URL 中可见。 发布将在您更新服务器中的某些内容并且有关键数据时使用,例如您的请求中的密码、帐号等。 post 的另一个优点是它不是固定大小,因此您可以发送无限的数据,并且在任何情况下都不会看到数据。

                【讨论】:

                  猜你喜欢
                  • 2014-01-28
                  • 1970-01-01
                  • 2016-02-15
                  • 2015-04-01
                  • 2012-02-27
                  • 2011-01-21
                  • 1970-01-01
                  • 2011-07-09
                  • 2013-08-12
                  相关资源
                  最近更新 更多