SSM——SpringMVC方法返回值类型



处理器的返回值介绍

在这里插入图片描述

(1)Servlet将结果返回浏览器

  • 转发:带数据
  • 重定向:不带数据
  • 异步:json数据发给页面的js,js组织标签显示
    Servlet里面编写响应浏览器的代码都要调用response

(2)springmvc的方法设计了多种返回值类型

  • ModelAndView
  • void
  • String :请求转发,重定向,json数据

ModelAndView

model和view–>数据+视图

  • (1)ModelAndView 是SPringMVC提供模型视图
  • (2)作用
    设置数据 addObject(key,value)
    设置页面setViewName(逻辑视图) 就是文件的名称
@Controller
public class Demo02ReturnController {
    
    
    //public 返回值类型 方法名(参数类型 参数名){}
    @RequestMapping(path = "demo01.action",method = {
    
    RequestMethod.POST,RequestMethod.GET})//回显页面
    public ModelAndView test01(){
    
    //
        Person p1 = new Person(1,"jack","1234");
        Person p2 = new Person(2,"rose","1234");
        List<Person> list = new ArrayList<Person>();
        list.add(p1);
        list.add(p2);

        //使用ModelAndView实现请求转发
        ModelAndView mv = new ModelAndView();
        mv.addObject("list",list);
        mv.setViewName("demo04_update_persons");//前缀+逻辑视图+后缀
        //物理视图 真正的文件地址 /WEB-INF/jsp/demo04_update_persons.jsp
        //物理视图 = 前缀+逻辑视图+后缀
        return mv;
    }
}

Void

没有返回。

  • (1)方法返回值类型写上void
    此时,参数写上request,调用request带设置参数与请求转发或者重定向
  • (2)后台代码
  • (3)没有体现springmvc的优势

Controller要响应客户端请求。
基本思路:在方法的形参里面,放入HttpServletRequest request,HttpServletResponse response。

Demo02ReturnController.java

 @RequestMapping(path="demo02.action",method = {
    
    RequestMethod.GET,RequestMethod.POST})
    public void test02(HttpServletRequest req, HttpServletResponse resp)throws Exception{
    
    
        //请求转发
        req.setAttribute("name","请求转发");
        req.getRequestDispatcher("demo05.jsp").forward(req,resp);
    }

String(1)

  • (1)方法返回值类型写上String
    方法内返回 页面名称
  • (2)如果携带数据呢?
    方法参数写上Model,比ModelAndView 少了View
req.setAttriibute(key,val)
req....forward(req,resp)

---->Model是SpingMVC提供的一个模型类,该类不需要自己创建对象,系统自动创建

  • (3)Model作用
    Model可以用来向页面传递参数
  • (4)后台代码
    model.addAttribute(“item”, item);
  @RequestMapping(path="demo03.action",method = {
    
    RequestMethod.GET,RequestMethod.POST})
    public String test03(Model model){
    
    
        //Model 可以设置数据,自动由视图解析器带到页面
        model.addAttribute("data","wHelloWord");
        return "success"; //逻辑视图 文件名
    }

String(2)

  • (1)什么是逻辑视图与物理视图
    页面名称叫逻辑视图,不是真正的页面地址
    但是可以由视图解析器进行拼接,得到真正的页面地址,即物理视图
  • (2)返回值可以添加指令
    ---->1:forward 请求转发
    forward 指令:物理视图
    ---->2:redirect 重定向
    redirect 指令:项目访问路径+物理视图
    特点:视图解析器不对指令后的内容拼接前缀与后缀
  • (3)指令也可以访问控制器方法
 @RequestMapping(path="demo04.action",method = {
    
    RequestMethod.GET,RequestMethod.POST})
    public String test04(Model model){
    
    
        //Model 可以设置数据,自动由视图解析器带到页面
        model.addAttribute("data","wHelloWord");
        //return "forward:/WEB-INF/jsp/success.jsp"; //
        //return "redirect:http://www.baidu.com"; //外网
        //return "redirect:demo05.jsp"; //
        return "redirect:demo01.action"; //
    }

(1)请求转发

请求转发:在这里插入图片描述

  • 特点:
    (1)同一个请求。从浏览器端发起的是一个请求,这个请求,由controller1交给controller2来处理。
    (2)浏览器请求的是controller1。Controller1需要将什么信息给controller2,controller1会将所有的请求信息都交给controller2.
    (3)请求转发是共享request的数据的。

  • SpringMVC的实现方式:
    return String里面写上forward:,如下所示:
    在这里插入图片描述
    注意:转发的路径可以是controller方法的映射请求路径。也可以是jsp路径

(2)重定向

在这里插入图片描述

  • 特点:
    (1)浏览器发起Request1请求controller1,controller1重定向到一个新的路径。
    (2)实际上是controller1告诉浏览器重新发起一个全新的请求request2.
    (3)Request2和request1没有任何的关系。他们两是两个完全不相关的请求。
    (4)数据不会共享。浏览器地址栏地址发生变化。

  • SpringMVC实现重定向:
    return String里面写上redirect:,如下所示:
    在这里插入图片描述

注意:重定向到一个controller的请求路径上。

注意:springMVC中重定向和转发 后面跟的路径都是controller的路径,不是一个逻辑视图名。重定向和转发,最终都会指向一个JSP,这个jsp就是路径的controller方法返回的逻辑视图名。

猜你喜欢

转载自blog.csdn.net/qq_41209886/article/details/109080794