在restful中重定向的方法:接口定義:
//重定向到新頁面頁面
@Path("/openpage/{id}")
@GET
@Consumes(MediaType.APPLICATION_XML)
Response openPage(@PathParam("id")Long id);
實現(xiàn)類:
@Overridepublic Response openPage(Long pageId, Long storeId) {
try {
URI uri = new URI("http://xxx/xx/openpage/3");
ResponseBuilder builder = Response.status(Response.Status.FOUND).location(uri);// 對應http響應碼302
// ResponseBuilder builder = Response.seeOther(uri);// 對應http響應碼303
// ResponseBuilder builder = Response.temporaryRedirect(uri);// 對應http響應碼307
return builder.build();
} catch (URISyntaxException e) {
e.printStackTrace();
}
return null;
}
備注:
1、ResponseBuilder是創(chuàng)建Response的工廠類逻澳。
2闸天、location(uri)實際是更新ResponseBuilder。
3斜做、seeOther(uri)苞氮、temporaryRedirect(uri)會生成一個新的ResponseBuilder。
4瓤逼、http協(xié)議響應碼3XX的含義HTTP狀態(tài)碼3XX表示重定向笼吟,表明瀏覽器需要執(zhí)行某些特殊的處理以正確處理請求。301 Moved Permanently 永久性定向霸旗。該狀態(tài)碼表示請求的資源已被分配了新的URI贷帮,以后應使用資源現(xiàn)在所指的URI。302 Found 臨時性重定向诱告。該狀態(tài)碼表示請求的資源已被分配了新的URI撵枢,希望用戶(本次)能使用新的URI訪問。和301相似精居,但302表示的資源不是永久移動锄禽,只是臨時性的。換句話說靴姿,已移動的資源對應的URI將來還有可能發(fā)生變化沃但,比如,用戶把uri保存為書簽佛吓,但不會像301狀態(tài)碼出現(xiàn)時那樣更新書簽宵晚,而是仍舊保留返回302狀態(tài)碼的頁面對應的uri303 See Other 該狀態(tài)碼表示由于請求對應的資源存在著另一個URI恨旱,應使用GET方法定向獲取請求的資源,=坝疼, 303和302狀態(tài)碼有著相同的功能搜贤,但是303明確表示客戶端應當采用get方法獲取資源,這點與302狀態(tài)碼有區(qū)別钝凶。 比如仪芒,當使用post方法訪問CGI程序,其執(zhí)行后的處理結果為希望客戶端能以get方法重定向到另一個uri上去時耕陷,返回303狀態(tài)碼掂名。雖然302也可實現(xiàn)相同的功能,但這里使用302狀態(tài)碼是最理想的哟沫。當301饺蔑、302、303響應狀態(tài)碼返回時嗜诀,幾乎所有瀏覽器都會把post改成get猾警,并刪除請求報文內(nèi)的主體,之后請求會自動再次發(fā)送隆敢。 301发皿、302標準是禁止將post方法改變成get方法的,但實際使用時大家都會這么做拂蝎。307 Temporary Redirect 臨時重定向穴墅。該狀態(tài)碼與302有相同的含義。盡管302標準禁止post變化get温自,但實際使用時大家不遵守玄货。 307會遵照瀏覽器標準,不會從post變?yōu)間et悼泌。但是對于處理響應時的行為松捉,各種瀏覽器有可能出現(xiàn)不同的情況。