如何在Http中覆盖302状态?

时间:2013-11-25 11:14:34

标签: java http rest servlets

客户端呼叫一个休息服务,其响应使用重定向到另一个休息服务  sendRedirect()方法

response.sendRedirect("http://localhost:8080/com.youtube.rest/api/v1/status/toreply"); .

从第二个服务结果返回到客户端。但是当将服务1的响应重定向到服务2时,服务1以状态302向客户端确认。我不想将服务1的任何确认返回给客户。我怎么能避免这种承认呢?或者我想返回状态200确认。请提出解决此问题的方法。

1 个答案:

答案 0 :(得分:2)

发送回状态代码302正是您告诉服务器要做的!这就是重定向的作用:它告诉客户端它应该在不同的URL下查找资源!

重定向的状态代码为302(已找到)。由于HTTP 1.1 303(参见其他)或307(暂时移动)也可以使用,但servlet规范明确表示必须使用302。另请参阅JavaDoc of HttpServletResponse#sendRedirect

  

(...)调用此方法将状态代码设置为SC_FOUND 302(Found)。 (...)

转发到同一网络应用程序中的资源

如果您想将请求转发到同一Web应用程序中的另一个资源/ servlet,请使用RequestDispatcher

RequestDispatcher dispatcher =
    request.getRequestDispatcher("path-to-local-content");
dispatcher.forward(request, response);

转发到同一服务器上另一个网络应用程序中的资源

如果内容位于同一台服务器上但位于其他网络应用程序中,则必须通过RequestDispatcher创建ServletContext

ServletContext context = request.getServletContext();
RequestDispatcher dispatcher =
    context.getRequestDispatcher("/<other-webapp>/<path-to-content>");
dispatcher.forward(request, response);

请注意,某些服务器不允许跨上下文调度并返回null调度程序。在Tomcat上,默认情况下禁用跨上下文调度,但可以在Context configuration中启用。

包含来自“外国”网络服务器的内容

如果内容未在同一服务器上本地托管(更精确:由同一个servlet引擎),则必须打开HttpURLConnection到外部Web服务器并自行检索数据。

另见: