servlet的doGet和doPost方法

7
我想了解在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);
}
}

谢谢

5个回答

20

doGet() 处理传入的 HTTP GET 请求,而 doPost() 则处理... POST 请求。同样也有相应的方法来处理 PUT、DELETE 等请求。

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

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


在servlet中,您何时实际上想要区分获取(get)和提交(post)?什么样的用例(或需求)会需要这样做? - user330315
4
GET用于获取资源,必须满足幂等性,不应该修改服务器上的任何内容。POST不满足幂等性,用于在服务器上创建、更新或删除某些内容。如果必须使用GET,就没有理由使用POST,反之亦然。如果用户刷新页面或浏览历史记录时使用错误的方法,可能会导致各种问题。通常使用GET显示表单,使用POST提交表单。 - JB Nizet
doGet() 用于 /users 返回一个列表,doPost() 同样是针对相同的 URL(servlet)创建新用户。当然,我可以将这两种方法委托到一个单独的方法中,然后使用 HttpServletRequest.getMethod() ,但这只会使事情更加复杂。 - Tomasz Nurkiewicz
谢谢大家的回答,我现在清楚了get和post之间的简单区别,但是对于使用这两种方法的一段servlet代码仍然不太明白。 - user460920
好的,如果我在HTML中写入“method=get”,并且对于servlet我使用“doPost()”或反之亦然,那么它会起作用吗?还是我必须同时在servlet和HTML表单中使用相同的方法? - user460920
1
如果您使用 GET(默认)提交表单,则将调用 doGet()。如果使用 POST 提交,则会调用 doPost()。如果您只实现了 doPost(),但表单却使用 GET,则 Servlet 容器将抛出异常。 - Tomasz Nurkiewicz

3

这是处理http请求类型(例如GET和POST)的方法。根据应用程序的要求,人们可能选择将请求类型保留为GET或POST,因此如果您同时处理它们,则会出现错误。如果您想以类似的方式处理它们,则可以创建另一个方法doSomething,并从您的doGet和doPost方法中调用它。详细信息请参见此答案


3

简单来说,泛化 Servlet 就是使其通用化,即使将来更改请求方法也无需编辑 Servlet,这将减少将来修改应用程序所需的工作量。


1
“这不是与get请求有关吗?它允许在浏览器窗口的URL中看到参数,而post请求将参数合并到请求结构中,因此无法查看。您的请求将如何从客户端发出,作为get还是post。我认为这与安全和避免SQL注入有关,但这不是我的领域。希望一些专家能够纠正我的观点/评论,因为我自己也需要了解这个。”

0

正如您在这里所指出的,您确实可以调用第三个方法,但您也可以重写HttpServlet母类的service()方法,以便它始终调用一个唯一的方法。


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