2013-11-25 72 views
0

客戶端呼叫一個休息服務和它的響應重定向到使用 的sendRedirect另一個其餘service()方法如何在Http中覆蓋302狀態?

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

從所述第二服務結果返回給重定向從服務1響應於服務2,服務1時client.but以302的狀態向客戶確認。我不想從服務1返回給客戶的任何確認。我如何避免這種承認?或者我想返回狀態200確認。請使用某種方式來解決此問題。

回答

2

發回狀態碼302正是你告訴服務器做的!這就是重定向所做的:它告訴客戶它應該在不同的URL下查找資源!

重定向的狀態碼是302(找到)。由於HTTP 1.1 303(見其他)或307(暫時移動)也可以使用,但servlet規範明確指出必須使用302。參見JavaDoc of HttpServletResponse#sendRedirect

(...)調用此方法將狀態碼設置爲SC_FOUND 302(找到)。 (...)

着在同一個Web應用程序的資源

如果你不是想將請求轉發到在同一個Web應用程序的另一個資源/ servlet中,使用RequestDispatcher

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

轉發到同一臺服務器上的另一個Web的應用程序的資源

如果內容是在同一臺服務器上,但在其他網絡應用,該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到國外網站服務器並自行檢索數據。

參見:

+0

Hi..i同意你。如果我想使用RequestDispatcher的兩個服務應該是在工作的罰款相同server.its但是當我在休息服務中使用它給出的錯誤。在我的場景中,客戶端只會調用一次。客戶不應該知道接下來會發生什麼,它只會等待結果。所以我如何實現這種情況? – nichu09

+0

你的第二項服務「在同一臺服務器上」嗎?如果是,它是否也在同一個Web應用程序中?你會得到什麼錯誤? – isnot2bad

+0

是與其相同的server.but不同的應用程序。 – nichu09