spring中的请求转发与重定向

  当处理器对请求处理完毕后,向其他资源进行跳转时,有两种跳转方式:请求转发与重定向。而根据所要跳转的资源类型,又可分为两类:跳转到页面与跳转到其他处理器。
  注意,对于请求转发的页面,可以是WEB-INF中的页面;而重定向的页面,是不能为WEB-INF中页面的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问WEB-INF中资源的。
spring中的请求转发与重定向_第1张图片

请求转发的实现:

  使用forward转发也叫显式转发,顾名思义,就算我们不用forward,当我们返回一个mv.setViewName(“show”)时,也是进行了请求转发的操作,叫做隐式转发。
  同为请求转发,forward的好处在于他不会调用视图解析器。当我们在视图解析器中定义了访问前缀时,我们可能就无法调用其他文件中的资源了,这个时候就可以使用forward来进行请求转发
  同时,进行请求转发时,相关数据是存储在request作用域中的

    /*
    * 处理器方法返回MadelAndView,实现转发forword
    * 语法:setViewName("forward:视图文件的完整路径")
    * forward特点:不和视图解析器一同使用,就当项目中没有视图解析器
    * */
    @RequestMapping(value = "/queryEmps.do")
    @ResponseBody
    public ModelAndView queryEmps(){
        ModelAndView mv=new ModelAndView();
        mv.addObject("msg","张三");
        mv.setViewName("forward:/WEB-INF/jsp/show.jsp");
        return mv;
    }

重定向的实现

重定向无法访问WEB-INF下的资源!重定向无法访问WEB-INF下的资源!重定向无法访问WEB-INF下的资源!

    /*
    * 处理器方法返回ModelAndView,实现重定向redirect
    * 语法:setViewName("redirect:视图完整路径")
    * redirect特点: 不和视图解析器一同使用,就当项目中没有视图解析器
    *
    * 框架对重定向的操作:
    * 1.框架会把Model中简单类型的数据转为String使用,作为show.jsp的get请求参数使用。目的是在queryEmps.do
    * 和show.jsp两次请求之间传递参数
    *
    * 2.在目标show.jsp页面中,可以使用参数集合对象${param}获取请求参数值
    * ${param.msg}
    * 
    * 3.重定向无法访问WEB-INF的资源
    * */
  @RequestMapping(value = "/queryEmps.do")
    @ResponseBody
    public ModelAndView queryEmps(){
        ModelAndView mv=new ModelAndView();
        mv.addObject("msg","张三");
        mv.setViewName("redirect:/show.jsp");
        //重定向后,浏览器会发起第二次请求http://localhost:8080/SSM/show.jsp?msg=张三
        return mv;
    }

    @RequestMapping(value = "/addEmp.do",method = RequestMethod.POST)
    @ResponseBody
    public Emp addEmp(Emp emp){
        int i=empService.addEmp(emp);
        return emp;
    }

你可能感兴趣的:(SSM笔记,spring,java,mvc)