2012-02-05 182 views
7

我想知道在servlet中为什么我们在同一个程序中一起使用doGet和doPost方法。它有什么用处?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); 
} 
} 

感谢

回答

2

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

20

doGet()处理传入的HTTP请求GETdoPost()处理... POST请求。也有处理PUT,DELTE等的方法。

如果您使用GET(默认)提交表单,将调用doGet()。如果您使用POST提交,则此时将调用doPost()。如果您仅实现doPost(),但表单将使用GET,则servlet容器将引发异常。

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

+0

什么时候你真的想区分servlet中的get和post?这将是什么样的用例(或需求)? – 2012-02-05 10:19:54

+4

GET应该获取资源。它必须是幂等的,不应该修改服务器中的任何东西。 POST不是幂等的,用于创建,更新或删除服务器上的某些内容。当必须使用GET时,没有理由使用POST,并且在使用POST时使用GET是不好的做法,如果用户刷新页面或浏览历史记录,可能会导致各种问题。通常使用GET来显示表单,并通过POST提交。 – 2012-02-05 10:23:13

+0

'doGet()'为'/ users'返回一个列表,'doPost()'为同一个URL(servlet)创建新的用户。当然,我可以将这两种方法委托为一个,然后使用['HttpServletRequest.getMethod()'](http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html# getMethod())但它只会使问题复杂化。 – 2012-02-05 10:25:06

1

是不是与一个get请求有关,允许在浏览器窗口中的URL中看到参数,并且post请求将参数合并到请求的结构中,因此隐藏在视图中。您的请求将如何作为获取或帖子从客户端获得。我认为这是与安全和避免SQL注入有关,但它不是我的领域。希望有一位专家对我的观点/评论有正确的认识,因为我自己需要了解这一点。

3

这是为了处理这两种请求类型,例如。 http和GET和POST。根据应用程序的要求,人们可能会选择将请求类型保持为GET或POST,因此如果您处理它们两项,将会出错。而如果你要处理他们两人以类似的方式,那么你可以创建另一个方法DoSomething的,并从您的doGet和doPost方法调用它的更多信息see this answer

0

正如你指出here你的确可以调用第三个方法,但你也可以覆盖HttpServlet母类中的service()方法,以便它调用alawys一种独特的方法。

相关问题