• Java——Spring MVC响应输出


    响应中产生结果主要有两种方式:
      @ResponseBody 产生响应文本,返回字符串
      ModelAndView 利用模板引擎渲染输出,返回页面

    1.@ResponseBody

    @ResponseBody直接产生响应体的数据,过程不涉及任何视图。
    @ResponseBody可产生标准字符串/JSON/XML等格式数据。
    @ResponseBody被StringHttpMessageConverter所影响。

    2.ModelAndView

    ModelAndView对象是指“模型(数据)与视图(界面)”对象。
    通过ModelAndView可将包含数据对象与模板引擎进行绑定。
    Spring MVC中默认的View是JSP,也可以配置其他模板引擎。

    在webapp目录下面,创建一个JSP文件。
    然后编写控制器:

    @GetMapping("/view")
    public ModelAndView showView(){
        //测试根路径为webapp,/view.jsp与view.jsp均可。
        ModelAndView mav = new ModelAndView("/view.jsp");
        return mav;
    }

     一般后端返回页面的时候肯定需要传入参数,因此我们需要向View页面中注入参数:

    @GetMapping("/view")
    public ModelAndView showView(@RequestParam(value = "userid") Integer userId){
        UserInfo userInfo = new UserInfo();
        if (userId == 1){
            userInfo.setName("科比");
            userInfo.setMobile("13167246031");
            userInfo.setAddress("湖北罗田");
        } else {
            userInfo.setName("陈星");
            userInfo.setMobile("18972068500");
            userInfo.setAddress("湖北安陆");
        }
        ModelAndView mav = new ModelAndView("/view.jsp");
        mav.addObject("user",userInfo);
        return mav;
    }

    然后在JSP页面中就可以接收了:
    <h3>user:${user.name}</h3>
    <h3>user:${user.address}</h3>
    访问页面:

     在view中返回map、list都是可行的,不仅只有对象:
    Map<String, String> map=new HashMap<String, String>();
    map.put("sex","男");
    mav.addObject("map",map);

    或者直接返回一个字符串也行:
    mav.addObject("msg", "我要返回值");

    3.ModelAndView的核心用法

    mav.addObject()方法设置的属性默认存放在当前请求中。
    默认ModelAndView使用请求转发(forward)至页面。就是将当前请求原封不动的传递给view.jsp。addObecj()因此可以在当前请求中存放数据。
    重定向使用new ModelAndView("redirect:/view.jsp"),所谓重定向就是发请一个新的请求来访问view.jsp

    在请求/view的过程中,链接并没有发生变化:

     如果我们使用ModelAndView("redirect:/view.jsp"),那么页面就会发生跳转:

     URL其实发生了变化。
    我们发现参数不见,那是因为原先包含数据的那个请求被清空了。那么如何解决数据丢失的问题?
    ModelAndView mav = new ModelAndView();
    mav.setViewName("/view.jsp"); //建议使用绝对路径,软件设计要减少对外部环境的依赖
    mav.addObject("user",userInfo);
    return mav;

    我们只要在运行期间设置地址就可以。

    4.String与ModelMap 

    ModelMap可以实现与ModelAndView类似的功能。

    @GetMapping("/show")
    public String show(ModelMap modelMap){
        String view = "/um/view.jsp";
        modelMap.addAttribute("msg","我是传奇");
        return view;
    }

    方法被@ResponseBody描述,SpringMVC直接响应String字符串本身

    @GetMapping("/show")
    @ResponseBody
    public String show(ModelMap modelMap){
        String view = "/um/view.jsp";
        modelMap.addAttribute("msg","我是传奇");
        return view;
    }

  • 相关阅读:
    NOIP2020 游记
    李超线段树
    选举「elections」
    Alt+数字输入
    素数
    CSP-S2020 爆炸记
    [CF487C] Prefix Product Sequence
    [CF489E] Hiking
    L2-019 悄悄关注 (25 分)
    L2-032 彩虹瓶 (25 分)
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12521560.html
Copyright © 2020-2023  润新知