【问题标题】:does returning from doGet() or doPost() automatically send a resonse从 doGet() 或 doPost() 返回是否会自动发送响应
【发布时间】:2018-04-21 17:19:30
【问题描述】:

我环顾四周,之前问过这个问题,但没有得到完整的答案。当您从 doGet() 或 doPost() 明确返回时,无论您是否对任何内容进行了编码,都会发送响应。如果是这样,默认代码是什么?只需 response.setStatus() 并返回就足够了吗?如果不是:所以我总是手动发回响应?不使用 forward 或 redirect 的默认响应方式是什么?

【问题讨论】:

  • 您必须设置状态,根据您发送的状态,您可能需要发送响应正文。如果您只返回状态 200,您可以不发送正文,但浏览器上的响应将是一个空白页面。阅读 HTTP RFC 以了解更多关于这意味着什么:tools.ietf.org/html/rfc2616
  • 所以当你说 response.getWriter()).write 是什么发回响应?还是必须转发回页面?什么机制发送响应?
  • 是的,设置状态和写入结果,这会将东西发送回客户端,确保完成后调用flush(),某些实现不会自动刷新。

标签: servlets


【解决方案1】:

如果你什么都不做,只是从一个 servlet 返回(甚至不返回),它会返回一个状态码 200(OK) 空响应。使用下面的 servlet 在 tomcat 和 glassfish 服务器上对其进行了测试:

@WebServlet("/a")
public class a extends HttpServlet {

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

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

}

使用Chrome的network profiler工具你可以看到我说的:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2015-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    相关资源
    最近更新 更多