在doGet/doPost方法结尾处,Servlet是否需要显式返回?

4

在 doGet 或 doPost 方法的末尾明确返回和让方法自行返回是否有区别?


没有区别。无论是在方法末尾明确返回还是让方法自行返回,都会得到相同的结果。
public void doGet(HttpSerlvetRequest req, HttpServletResponse resp) {
    <my code here>
    return;
}

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

12

但是有些情况下,你可能会在servlet方法中看到return语句,这对于初学者来说可能一开始会感到困惑。以下是一个例子:

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

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


与问题无关,但在Servlet中还有什么可以产生相同的效果(即在dispatcherredirect之后的代码块不被执行)? - absin
如果您没有在响应中明确地编写任何内容,那么返回时Servlet会发送一个空白响应吗? - SallyRothroat

3
不需要。作为一个普通的void方法,它不需要return语句。

2

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


0

完全没有区别,方法结尾处隐含了一个返回。


这仅适用于一个void方法。 - Stephen C

0

根本没有区别,返回语句是不必要的。


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