doGet()/ doPost()和processRequest()之间的区别是什么?

时间:2016-01-19 21:35:57

标签: servlets java-ee httprequest

使用doGet()/ doPost()而不是processRequest()有什么区别?

是否有人使用doGet()和doPost()对来处理他/她的请求或使用一个方法processRequest()?

1 个答案:

答案 0 :(得分:4)

  

有什么区别?

这只是将公共代码移动到一个地方的问题,例如:

public class TestServlet extends HttpServlet 
{

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        response.getWriter().println("Welcome to TestSevlet");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
        processRequest(request, response);
    }
}

*注意:doPost()和doGet()是Servlet接口的一部分,而processRequest()只是辅助方法的常用名称,不属于任何接口

  

你应该使用processRequest()?

如果您希望在POST请求上具有与GET请求不同的行为,那么这取决于您的Servlet应该如何表现以及如何调用您的servlet,然后单独实现它们。如果你的servlet具有相同的行为,无论是否在其上调用GET或POST,那么将它们路由到相同的processRequest()方法。

在大多数情况下(可能是90%的时间)是的,您可以将doGet()和doPost()路由到单个processRequest()方法。

NOT 想要将两者都路由到processRequest()方法的示例是,如果要为POST请求上传文件并查看GET请求的某些数据。

  

processRequest()是否被视为良好做法?

如果GET和POST正在做同样的事情,那么绝对是的。事实上,Arun Gupta(Java EE的主要规范之一)使用了这种模式in his samples