zoukankan      html  css  js  c++  java
  • 4. Spring MVC 数据响应方式

    SpringMVC的数据响应方式

    1) 页面跳转

    直接返回字符串【1】

    通过ModelAndView对象返回【2】

    2) 回写数据 

    直接返回字符串【1】

    返回对象或集合【2】

    下面详解:

    页面跳转:直接返回字符串:【也就是上面我们说的那个】

     

    这是结构图 其中WEB-INF 我们说外界是不能直接访问的,但是他可以在这里转发访问:

        @RequestMapping(value = "/go",method = RequestMethod.GET)
        public String GoUrl(){
            System.out.println("您成功访问了 根目录/aaa/go 网页!");
            return "s1";
        }
       <bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/WEB-INF/jsp/"/>  <!--文件名前缀-->
            <property name="suffix" value=".jsp"/>      <!--文件名后缀-->
        </bean>

    所以呢 这里路劲合起来就是访问了: 

    /WEB-INF/jsp/s1.jsp

    所以就完成了一个访问了

    这就是直接返回字符串的方式。

    页面跳转: 返回 ModelAndView 【很多种方式】:

    1: 直接返回 new 一个 ModelAndView 然后 设置一下参数即可返回:

    TestController.java:

    @Controller
    public class TestController {
        @RequestMapping(value = "/go",method = RequestMethod.GET)
        //返回的数据类型一定要是 ModeAndView哦~
        public ModelAndView GoUrl(){
            //实例化一个ModelAndView对象
            ModelAndView mad = new ModelAndView();
            //设置model  和 View名
            //设置Model 键值方式
            mad.addObject("name","BiHu");
            //设置View 名
            mad.setViewName("s1");  //因为配置里面设置了前缀和后缀 所以这里直接设置s1
    
            //返回ModelAndView
            return mad;
        }
    }

    Tips  这里的设置了 视图解析器的 前缀和后缀 所以这里直接返回了,注意啊。

    因为设置了Model ,设置了个name = “bihu” 所以在s1.jsp 中可以直接用el表达式解析出来【如果无法解析 请头部添加<%@ page isELIgnored="false" %>】

    s1.jsp:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page isELIgnored="false" %>
    <html>
    <head>
        <title>ok!</title>
    </head>
    <body>
        <h2>ok! 恭喜您! 您的ModelAndView的参数是: ${name} </h2>
    </body>
    </html>

    所以你看到的是这样的:

    所以呢 你可以单单返回视图不设置Model也是Ok的啦~

    2:直接返回 让SpringMVC自己帮我注入ModelAndView [形参ModelAndView]

    当你不想自己new 你可以设置一个形参 让SpringMVC 自己帮你注入,这样也是完全可以的! 

    例:

    @Controller
    public class TestController {
        @RequestMapping(value = "/go",method = RequestMethod.GET)
        //添加形参ModelAndView 
        public ModelAndView GoUrl(ModelAndView mad){
            mad.addObject("name","BiHu");
            mad.setViewName("s1");
            return mad;
        }
    }

     3 Model 和 View 分离  [形参Model]


    我们还可以将他们两分离,其中Model 做形参,但是返回的字符串类型【视图】。

    @Controller
    public class TestController {
        @RequestMapping(value = "/go",method = RequestMethod.GET)
        //Model 和 View 分离:返回String 添加形参Model
        public String GoUrl(Model model){
            //即使我是Model 我也可以携带参数[键-值]
            model.addAttribute("name","BiHu");
            return "s1";    //因为容器配了 前缀和后缀 所以咳咳
        }
    }


    4 除了上面三个 还可以用原始的方式来【Request】:

    你想的到的方法,SpringMVC的作者都想到了,所以:原始的Request也可以实现跳转【可以说是 视图 和 Request分离】

    @Controller
    public class TestController {
        @RequestMapping(value = "/go",method = RequestMethod.GET)
        public String GoUrl(HttpServletRequest request){
            request.setAttribute("name","BiHu");
            return "s1";    //因为容器配了 前缀和后缀 所以咳咳
        }
    }

    注意: modeandvie 他addobject 的参数 因为你跳转了嘛 所以我猜测呢是 跳转后域中才生效了,而且是仅在页面生效,所以呢我们要注意他的命名哟 别搞混即可,只是猜测

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14946401.html

  • 相关阅读:
    celery 使用(一)
    RabbitMQ(一 初识)
    python 生成器与迭代器(yield 用法)
    python与consul 实现gRPC服务注册-发现
    python 使用gRPC
    IDEA 破解图文教程
    ArrayList 源码分析 -- 扩容问题及序列化问题
    面向对象来理解链表
    Winrar去广告图文教程
    Spring Boot 整合JDBC 实现后端项目开发
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14946401.html
Copyright © 2011-2022 走看看