java - 301 http 响应中的正文

标签 java http servlets

我必须发送 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,我可以看到位置 header 在响应中可见4次。

需要了解这种行为。我需要在301中发送正文,可以吗?

编辑: 在 println 上面设置 setHeader 和 setStatus 之后...

enter image description here

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

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

最佳答案

如果有内容,

PrintWriter 实际上会写入输出流,这需要它继续序列化 header 和状态代码,因为它们在响应中排在第一位。因此它只是忽略对 setStatussetHeader 的后续调用。只需将这些调用移至 println 上方,我敢打赌它会按您的预期工作。

关于java - 301 http 响应中的正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16830397/

相关文章:

java - wldeploy 部署文件夹中的所有文件

java - 如何为不同的 Zookeeper Docker 容器设置不同的管理端口?

c# - 是否有任何使用 TCP 套接字从中收集数据来读取 http 请求的示例(例如以某种方式模拟 Http 服务器)

java - 为什么我在指向 ServletFileUpload 的 HttpServletRequest 上收到 NoClassDefFoundError?

javascript - 正则表达式不包含某些词

java - 调试-ConfigurationUtils.locate() : base is null

api - 在 RESTful 应用程序中,我们如何区分 "action"和 HTTP 动词(GET、POST、PUT、DELETE)?

javascript - 我的帖子请求在 $q.all 执行之前得到解决

jsp - 从 servlet 调用 jsp

java - 如何从 servlet 获取给定 URL 的来源?