springmvc视图解析

SpringMVC 视图解析的几种方式:
在视图解析的过程中,需要知道逻辑view的名字,model的名字以访问model和view。
使用jsp进行解析,InternalResourceViewResolver 做解析器

1、使用modelAndView,addObject()方法存储数据和访问model的名字,setViewName()方法设置逻辑视图名称

    @RequestMapping("querycourse.do")
    public ModelAndView list(HttpServletRequest request, HttpServletResponse response) {
        List<Course> list = courseService.queryAll();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("list", list);
        modelAndView.setViewName("querycourse");
        return modelAndView;

2、使用String,只返回逻辑视图名称,数据自动存储在model中,使用类型的名称作为应用model数据,如这里访问model使用courseList,逻辑view为querycourse

    @RequestMapping("querycourse.do")
    public String list(Model model) {
        List<Course> list = courseService.queryAll();
        //使用courseList作为model名
        model.addAttribute(list);
        return "querycourse";
    }

3、直接return model,非String和modelAndView,如非json的集合,Map等,使用“数据”作为返回结果,逻辑视图名称默认为RequestMapping路径的映射结果,使用类型的名称作为应用model数据,如这里访问model使用courseList,逻辑视图为querycourse

    @RequestMapping("querycourse.do")
    public List<Course> list() {
        List<Course> list = courseService.queryAll();
        //使用querycourse作为默认视图名
        return list;
    }

当逻辑视图不存在时:


返回404

4、 json交互

注意,这里没有使用json的交互方式,json的交互方式是怎样的呢?ModelAndView可以直接返回页面和数据十分方便,如果想做页面局部刷新的功能,只想返回数据而不返回页面时,该怎么办呢?
用ModelAndView显然不行,因为其必须要附带视图页面,如果没有会报错
可以参考下面这篇文章:json交互

5、源码查看

返回String时,视图解析器利用String创建视图的实例,这里是InternalResourceView的实例

创建视图时,视图包含model,request,response,所以返回string可以访问。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC的视图解析器原理是通过处理器适配器中的processDispatchResult方法来实现的。在这个方法中,首先根据方法的返回值获取View对象,即定义了页面的渲染逻辑。这个过程是通过所有的视图解析器尝试是否能根据当前返回值得到View对象来完成的。其中,ContentNegotiationViewResolver包含了所有的视图解析器,它内部利用下面所有的视图解析器来获取视图对象。然后,视图对象调用自定义的render方法进行页面渲染工作。 对于不同的返回值类型,Spring MVC采用不同的方式进行视图解析。当返回值以forward:开头时,使用InternalResourceView进行转发,即调用request.getRequestDispatcher(path).forward(request, response);当返回值以redirect:开头时,使用RedirectView进行重定向,即调用response.sendRedirect(encodedURL);当返回值是普通字符串时,使用ThymeleafView进行渲染。 在实现类的构造器中,可以传入一个MediaType数组来匹配请求头,以选择使用哪个视图解析器。另外,AbstractHttpMessageConverter类也有一个属性supportedMediaTypes,可用于设置请求头的匹配规则。 综上所述,Spring MVC的视图解析器原理是通过处理器适配器中的processDispatchResult方法来根据方法的返回值获取View对象,并根据不同的返回值类型使用不同的视图解析器进行页面渲染。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [SpringMVC视图解析原理](https://blog.csdn.net/xd592319702/article/details/126091248)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [springmvc 视图解析器 原理 返回根据请求返回xml或者json](https://blog.csdn.net/qq_31349087/article/details/79002107)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值