【问题标题】:Should a servlet explicitly return at the end of doGet/doPost?servlet 是否应该在 doGet/doPost 结束时显式返回?
【发布时间】:2010-12-20 05:14:50
【问题描述】:

在 doGet 或 doPost-methods 结束时显式返回与仅让方法“自行”返回之间有什么区别吗?

public void doGet(HttpSerlvetRequest req, HttpServletResponse resp) {
    <my code here>
    return;
}

public void doGet(HttpSerlvetRequest req, HttpServletResponse resp) {
    <my code here>
}

【问题讨论】:

    标签: java servlets return


    【解决方案1】:

    但是,在某些情况下,您会在 servlet 方法中看到 return 语句,乍一看可能会让初学者感到困惑。这是一个例子:

    protected void doPost(request, response) {
        if (someCondition) {
            response.sendRedirect("page");
            return;
        }
        doSomethingElse();
        request.getRequestDispatcher("page").forward(request, response);
    }
    

    这里return 语句是必要的,因为调用重定向(或转发)不会导致代码像某些初学者认为的那样神奇地跳出方法块。它仍然会继续运行直到结束,这将在调用 forward 时导致 IllegalStateException: response already committed

    【讨论】:

    • 与问题无关,但还有什么可以在 servlet 中产生相同的效果(dispatcherredirect 之后的代码块没有被执行)?
    • 如果您返回时没有明确向响应写入任何内容,servlet 是否只会发送空白响应?
    【解决方案2】:

    没有。作为常规的void 方法,它不需要return

    【讨论】:

      【解决方案3】:

      完全没有必要;也不添加任何样式点。

      【讨论】:

        【解决方案4】:

        根本没有区别,返回是隐含在方法末尾的。

        【讨论】:

        • 它只隐含在 void 方法中。
        【解决方案5】:

        完全没有区别,不需要return语句。

        【讨论】:

          猜你喜欢
          • 2011-07-09
          • 2011-08-18
          • 1970-01-01
          • 2012-02-27
          • 2011-01-21
          • 2014-05-23
          • 1970-01-01
          • 2015-03-27
          • 2014-06-02
          相关资源
          最近更新 更多