doGet() / doPost()和processRequest()有什么区别?

4

使用 doGet() / doPost() 与 processRequest() 有什么区别?

处理请求时,是应该使用 doGet() 和 doPost() 这对方法还是使用一个方法 processRequest() 呢?

1个回答

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()吗?”这取决于您的Servlet应该如何运行以及如何调用您的servlet。如果您希望在POST请求和GET请求上具有不同的行为,则应分别实现它们。如果您的servlet无论是调用GET还是POST都应该具有相同的行为,则将它们路由到同一个processRequest()方法中。
在大多数情况下(可能有90%的时间),是的,您可以将doGet()和doPost()路由到单个processRequest()方法中。
一个不适合将两者都路由到processRequest()方法的示例是,如果您想要上传文件以进行POST请求并查看某些数据以进行GET请求。
“processRequest()被认为是最佳实践吗?”
如果GET和POST在做同样的事情,那么是的,绝对可以。事实上,Java EE的主要规范领导之一Arun Gupta在他的示例中使用了这种模式(链接)

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