2013-05-30 50 views
1

我要送301響應code.Below是代碼我使用:體在301 HTTP響應

 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的情況下,我可以看到位置標題在響應中可見4次。

需要了解此行爲。我需要在301發送身體。這是可能的。

編輯: 製作和的setHeader以上setStatus後的println ...

enter image description here

消息7和11:如果 「origReqBody」 是空白 消息27,31:如果 「origReqBody」 不爲空

相同的行爲......我期待301,而不是302

+0

奇怪。我無法重現它。如果我把位置標題(你的代碼的最後一行),就像我從來沒有打印任何東西到'出'。如果我沒有放置位置,那麼它會打印。無論哪種方式,我的servlet返回一個'301'。 – acdcjunior

+0

添加圖片 – VJS

+0

您使用的是什麼版本的servlet?什麼是容器?在方法的開始和結尾放一個'System.out.println(「status:」+ response.getStatus());'它們打印什麼? – acdcjunior

回答

2

PrintWriter實際寫入到輸出流,如果有內容,這就要求它繼續並序列化標題和狀態碼,因爲它們首先出現在響應中。所以它只是忽略了對setStatussetHeader的後續調用。只需將這些電話移動到println以上,我敢打賭它會按照您的預期工作。

+0

對不起,但它不工作。上面添加圖像.. – VJS

+0

你使用什麼servlet容器? – 2013-05-30 07:57:48

+0

使用servlet 2.5和getStatus不可用。我正在使用的容器(即apache)被嵌入在一些專有軟件 – VJS