请求转发:forward
特点:请求转发地址栏不会发生改变、只发送一次请求、能携带原有的参数,但只可以在同一个服务器中进行转发。
传统的请求转发
@RequestMapping("/fun")
public void fun(HttpServletRequest request,HttpServletResponse response){
request.getServletDispatcher("/WEB-INF/manager/list.jsp").forward(request,response);
}
SpringMVC中不经过视图解析器的请求转发
@RequestMapping("/fun1")
public String fun1(){
return "forward:/WEB-INF/manager/index.jsp";
}
@RequestMapping("/fun2")
public ModelAndView fun2(){
ModelAndView mav=new ModelAndView();
mav.setViewName("forward:/WEB-INF/manager/index.jsp");
return mav
}
SpringMVC中经过视图解析器的请求转发
@RequestMapping("/fun1")
private String fun1(Model model) {
return "list";
}
@RequestMapping("/fun2")
private ModelAndView fun2(Model model) {
ModelAndView mav=new ModelAndView();
mav.setViewName("list"); //也是请求转发,会经过视图解析器
return mav;
}
重定向:redirect
传统的重定向
@RequestMapping(value="/fun1")
public void fun1(HttpServletResponse response){
response.sendRedirect("/index");
}
SpringMVC中不带参数的重定向
@RequestMapping(value="/fun1")
public String fun1(){
return "redirect:/index";
}
@RequestMapping(value="/fun2")
public ModelAndView fun2(){
ModelAndView mv=new ModelAndView();
mv.setViewName("redirect:/index");
return mv;
}
SpringMVC中带参数的重定向
@RequestMapping("/fun")
private String fun(RedirectAttributes redirectAttributes ) {
redirectAttributes.addAttribute("param", 1);
return "redirect:/shopadmin/shoplist";
}
说明:
-
redirectAttributes.addAttributie(“prama”,value); 这种方法相当于在重定向链接地址上追加传递的参数。上面示例相当于请求 http://localhost:8080/o2o/shopadmin/shoplist?param=1
-
redirectAttributes.addFlashAttributie(“prama”,value); 方法是隐藏了参数,链接地址上不直接暴露,用(@ModelAttribute(value = “prama”)String prama)的方式获取参数。
@RequestMapping("/fun1")
private String fun1(RedirectAttributes redirectAttributes ) {
redirectAttributes .addFlashAttribute("param", 1001);
return "redirect:/fun2";
}
// 接收参数
@RequestMapping("/fun2")
private String fun2(@ModelAttribute("param") String param) {
System.out.println(param); //输出1001
return "show";
}