2

我必须发送 301 响应代码。下面是我正在使用的代码:

        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.println(origReqBody);
        resp.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
        resp.setHeader("Location", homeSiteRedirUrl);

在这里我观察到,如果“origReqBody”为空白,那么它正在发送 301,如果“origReqBody”有一些字符串,那么代码正在发送 302。在 302 的情况下,我可以看到 Location Header 在响应中可见 4 次。

需要了解这种行为。我需要在 301 发送身体。可以吗?

编辑:在 println 上面制作 setHeader 和 setStatus ...

在此处输入图像描述

消息 7 和 11:如果“origReqBody”为空消息 27、31:如果“origReqBody”不为空

同样的行为......我期待 301 而不是 302

4

1 回答 1

2

PrintWriter如果有内容,实际上会写入输出流,这需要它继续序列化标题和状态代码,因为它们在响应中排在第一位。所以它只是忽略了对setStatusand的后续调用setHeader。只需将这些电话移到 the 上方println,我敢打赌它会按您的预期工作。

于 2013-05-30T07:36:33.940 回答