doGet()和doPost()在流程方面有什么区别?

9

就流程而言,我知道doGet()是预处理,而doPost()是后处理,但具体是什么意思呢?


文档可能已经为您回答了这个问题,例如,“由服务器调用(通过服务方法)以允许servlet处理GET请求。” - Dave Newton
2个回答

15

关于流程的差异,我知道doGet()是预处理,而doPost是后处理,但这是什么意思?

实际上,这些方法与“预处理”和“后处理”无关。

要理解这些方法的作用,您需要了解一些HTTP协议的基本知识。

HTTP是一个请求-响应协议:客户端(例如Web浏览器)发送请求,服务器(例如Web服务器)以响应进行回复。每个请求由“请求行”、一系列“头部”行和可选的“正文”组成。典型的请求行如下所示:

  GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

这个请求行有三个部分:

事实上,HTTP规范定义了8种标准的HTTP请求方法(GET、PUT、POST、DELETE、HEAD、OPTIONS、TRACE和CONNECT),每种方法都有不同的含义。(其他方法由其他规范定义。)

Servlet API中的doGetdoPost方法分别用于处理HTTP GET和POST请求。事实上,还有其他“doXxxx”方法与其他标准HTTP方法匹配,除了 CONNECT。(CONNECT的语义不适用于servlet...)

有关更多信息,请参阅HTTP 1.1规范HttpServlet javadoc


我想补充一点,GET(就像HEAD一样)方法不应该对任何资源产生副作用,如果这些响应来自缓存,则会导致错误行为(摘自上述HTTP 1.1规范)。=> GET应仅用于读取内容而不是更改内容。 - Serge Ballesta
@SergeBallesta - 已经注意到了。我不会这样做,因为我的目的不是提供完整的HTTP方法教程。我只是试图解释Servlet doXxx方法的(真正)目的。 - Stephen C

11

这个链接详细介绍了

doGet()doPost()是由servlet类处理的HTTP请求。

在doGet()中,参数被附加到URL并与头信息一起发送。这在doPost()的情况下不会发生。在doPost()中,参数将分别发送。由于大多数Web服务器仅支持将有限数量的信息附加到标头,因此此标头的大小不应超过1024字节。doPost()没有此限制。通常,程序员很难选择doGet()和doPost()之间的区别。

当需要发送少量且不敏感的数据(例如查询)时,应使用doGet()。当需要发送相对较大且敏感的数据时,应使用doPost()。例如,在填写表单或发送登录标识和密码后发送数据。


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