客户端呼叫一个休息服务,其响应使用重定向到另一个休息服务 sendRedirect()方法
response.sendRedirect("http://localhost:8080/com.youtube.rest/api/v1/status/toreply"); .
从第二个服务结果返回到客户端。但是当将服务1的响应重定向到服务2时,服务1以状态302向客户端确认。我不想将服务1的任何确认返回给客户。我怎么能避免这种承认呢?或者我想返回状态200确认。请提出解决此问题的方法。
答案 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服务器并自行检索数据。
另见: