请求转发与重定向(学习笔记)

请求转发的场景

1.在控制类(Controller)下的void类型控制方法中,若是需要转发其他页面,可在参数中增加HttpServletRequest request参数,通过

request.getRequestDispatcher("WEB-INF/../..jsp").forward(request,response);

实现请求转发。

2.返回ModelAndView时,显示的转发请求,需要关键词(forward),在设置视图时需要设置全部路径,形式为

ModelAndView mv;
mv.setViewName("forward:/WEB-INF/../...jsp");

若是转发到其他控制类 

mv.setViewName("forward:/***.do");

3.返回String时的请求转发,很简单:

return "forward:/WEB-INF/../...jsp"

 实现请求转发时,参数传递的方式有很多,可以自己选择

mv.addObject("User","user"); //ModelAndView对象mv传递(返回String类型时不可用)
request.setAttribute("User","user");  //HttpServletRequest对象参数传递

重定向的场景:

1.返回ModelAndView重定向页面时,使用关键词redirect,由于重定向的页面无法通过request来获取参数,因此传递参数不能用request,重定向的页面不能访问WEB-INF下的资源使用model传参时不能传自定义的java对象,并且前端接收参数需要EL表达式中的请求参数param读取,因为视图解析器会将Map的value放入URL后作为请求参数传出去,任何类型的value都会转化为String类型,会导致前端接收不到自定义的对象(注:是在重定向中的规则)使用model传参时

User user=new User();
ModelAndView mv=new ModelAndView();
mv.addObject("name",user.getName());
mv.addObject("password",user.getPassword());
mv.setViewName("redirect:/aaa.jsp");  //注意,重定向不能访问WEB-INF下的资源
return mv;

还可以使用HttpSession传参 

session.setAttribute("User","user");
mv.setViewName("redirect:/aaa.jsp");

  这里就可以传java对象,前端直接用user.name接收,无需param请求参数

重定向控制器时,规则与重定向页面相同,将需要重定向的页面改为请求路径就好啊,新的控制器在接收参数时,可以用同名参数接收,也可以用属性与参数对应的java对象来接收

2.返回String类型时重定向

关键词redirect,传递参数有两种,Model和RedirectAttribute,后者专门用来传参并且继承于前者,所以规则一样,不能传递自定义java对象,只能传递基础类型

mv.addObject("name",user.getName());
mv.addObject("password",user.getPassword());
return "redirect:/aaa.jsp";
rd.addAttribute("name",user.getName());  //rd是在方法的参数中定义的RedirectAttribute rd
rd.addAttribute("password",user.getPassword());
return "redirect:/aaa.jsp";

注意:使用 RedirectAttribute时需要在SpringMVC配置中注册注解驱动

<mvc:annotation-driven/>

重定向到控制器方法时,规则与重定向页面相同,将需要重定向的页面改为请求路径就好啊,新的控制器在接收参数时,可以用同名参数接收,也可以用属性与参数对应的java对象来接收

3.返回void时

传参使用HttpSession,重定向使用response.sendRedirect(request.getContextPath()+"/aaa.jsp");

@RequestMapping("/aaa.do)
public void doaaa(User user,HttpSession session,HttpServletRequest requst,HttpServletResponse response){
    session.setAttribute("name",user.getName());
    seesion.setAttribute("password",user.getPassword());
    try{
        response.sendRedirect(request.getContextPath()+"/aaa.jsp");
    }catch(IOException e){
        e.printStackTrace();
    }
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值