何时使用doGet、doPost和service方法

11

我想了解这些servlet方法。我知道有一些关于这些方法的内容,例如:

  • doPost没有参数数量限制,而doGet有。
  • doGetdoPost更快。
  • doPostdoGet更安全。

我的问题是,由于这些方法接收相同的参数并执行我们实现的过程,那么这些方法之间的主要区别是什么,以及在哪种具体情况下使用每种方法进行处理


1
但是我们应该从哪里获取我们每日的UPs呢? - schlingel
1
如果谷歌拥有所有答案,那么 Stack Overflow 就不会存在并蓬勃发展了。 - instinct
1
事实上,通常情况下,谷歌搜索往往会导向Stack Overflow的答案。 - cirko
9个回答

14

doGet():> 我们将用于静态内容,当我们使用它时,我们的请求参数经过HTTP数据包头传递。HTTP数据包头的大小是固定的,因此只能发送有限的数据。或者在使用doGet()时请求参数会显示在地址栏中,或者像明文一样发送到网络数据。

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

service():> 如果我们定义它,我们将面临服务器连接问题,因为它是协议无关的,所以这不是一个好方法。


7

您提到了技术差异,还有我们谈论REST隐喻的一部分。

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


5

在不同的场合下会调用doGet() 、doPost() 、doPut() 和 doDelete() 方法,它们之间有一些细微差别。

是的,W3C 给出了一些规范

GET:

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

POST:

这种 HTTP 方法创建一个新的对象,与指定的对象链接并从属于它。新对象的内容作为请求的主体被包含在其中。

service() 方法从公共服务方法接收标准的 HTTP 请求,并将其分派到此类中定义的 doXXX 方法。


5
我将专注于它们的不同之处:
doService():当您知道自己在做什么时,请使用它。默认实现调用doGet()或doPost(),因此如果您覆盖它,则不会调用另一个方法。
doGet():按照惯例,GET方法不应更改应用程序的内部状态(您不应进行更新或类似操作)。
doPost():按照惯例,POST用于修改应用程序的内部状态(执行插入、更新、删除等操作)。

3

GET 应该是幂等的,而 POST 则可能不是。当您想要从服务器获取某些内容时,可以使用 GET,而将数据发布到服务器则使用 POST。如果 GET 是幂等的,则多次执行相同操作会产生相同结果,而使用 POST 会产生具有不同输出的副作用。您可以编写非幂等的 GET,但这违反了传统规范,可能会导致问题。可以将 GET 请求加为书签,但不能将 POST 请求加为书签。在 GET 中应限制查询参数,在 POST 中可以甚至发送文件以进行上传。


2
它们并不是。那只是规约。 - schlingel
一切都是约定俗成的,你应该相应地编写代码。我们应该教育人们遵循惯例而不是通过破坏它来给自己带来麻烦。 - AllTooSir
@schlingel,这就是为什么TheNewIdiot使用“应该”和“可能”的原因,他并没有说“必须”。 - morgano
1
首先:不,不是所有的东西都是惯例。其次:当你没有提到任何惯例时,我写下了我的评论。只有一句话说明GET是幂等的,POST不是。尽管如此:你是对的,人们应该知道惯例,但他们也应该知道这是一个惯例。 - schlingel

2

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


0

我认为你应该阅读一些关于HTTP的GET和POST方法的内容。你可以从这里开始。你的问题并不是与Java和Servlets相关,而是与Web编程的基础知识相关。


0
服务方法被Servlet容器调用来处理请求并回复适当的响应。每次发出请求时,都会调用服务方法。我们不需要重写它,因为在以下方面已经完成了:

  • doGet()
  • doPost()

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

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

我只写下了基本区别,其余有其他性能方面的差异。


0
我对这些servlet方法有些疑问。我知道一些关于这些方法的信息,比如:
• doPost在参数数量上没有限制,而doGet有。
• doGet比doPost更快。
• doPost比doGet更安全。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接