一、跳轉
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class Login{
/**轉發**/
@RequestMapping("/login.do")
public String login(HttpServletRequest request,HttpServletResponse response){
request.setAttribute("message", "hello");
return "forward:/index.do"; //forward在跳轉后可以取到message值
}
@RequestMapping("/index.do")
public String index(HttpServletRequest request,HttpServletResponse response){
return "welcome";
}
/**重定向**/
@RequestMapping("/logout.do")
public String logout(HttpServletRequest request,HttpServletResponse response){
request.setAttribute("message", "hello");
return "redirect:/register.do"; //redirect在跳轉后無法取到message值
}
@RequestMapping("/register.do")
public String register(HttpServletRequest request,HttpServletResponse response){
return "register";
}
}
另外forward跳轉后地址欄URL不會改變 而redirect會改變
二、傳參
@RequestMapping(value = "update", method = RequestMethod.POST)
public String update(@Valid @ModelAttribute("user") User user,
RedirectAttributes redirectAttributes) {
accountService.updateUser(user);
redirectAttributes.addFlashAttribute("message", "更新用戶" + user.getLoginName() + "成功");
return "redirect:/admin/user";
}
為了防止用戶刷新重復提交,save操作之后一般會redirect到另一個頁面,同時帶點操作成功的提示信息。因為是Redirect,Request里的attribute不會傳遞過去,如果放在session中,則需要在顯示后及時清理,不然下面每一頁都帶着這個信息也不對。Spring在3.1才提供了這個能力,原理是放到session中,session在跳到頁面后馬上移除對象。所以你刷新一下后這個值就會丟掉。
