SpringMVC 视图解析器 - ViewResolver

SpringMVC原理

当我们对SpringMVC控制的资源发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,接着Spring会分析看哪一个HandlerMapping定义的所有请求映射中存在对该请求的最合理的映射。然后通过该HandlerMapping取得其对应的Handler,接着再通过相应的HandlerAdapter处理该Handler。HandlerAdapter在对Handler进行处理之后会返回一个ModelAndView对象。在获得了ModelAndView对象之后,Spring就需要把该View渲染给用户,即返回给浏览器。在这个渲染的过程中,发挥作用的就是ViewResolver和View。当Handler返回的ModelAndView中不包含真正的视图,只返回一个逻辑视图名称的时候,ViewResolver就会把该逻辑视图名称解析为真正的视图View对象。View是真正进行视图渲染,把结果返回给浏览器的。

ViewResolver和View

SpringMVC 用于处理视图最重要的两个接口是 ViewResolver 和 View 。 ViewResolver 的主要作用是把一个逻辑上的视图名称解析为一个真正的视图, SpringMVC 中用于把 View 对象呈现给客户端的是 View 对象本身,而 ViewResolver 只是把逻辑视图名称解析为对象的 View 对象。 View 接口的主要作用是用于处理视图,然后返回给客户端。

视图解析器ViewResolver

这里写图片描述

  • AbstractCachingViewResolver
    这是一个抽象类,这种视图解析器会把它曾经解析过的视图保存起来,然后每次要解析视图的时候先从缓存里面找,如果找到了对应的视图就直接返回,如果没有就创建一个新的视图对象,然后把它放到一个用于缓存的 map 中,接着再把新建的视图返回。使用这种视图缓存的方式可以把解析视图的性能问题降到最低
  • UrlBasedViewResolver
    它是对 ViewResolver 的一种简单实现,而且继承了AbstractCachingViewResolver ,主要就是提供的一种拼接 URL 的方式来解析视图,它可以让我们通过 prefix 属性指定一个指定的前缀,通过 suffix 属性指定一个指定的后缀,然后把返回的逻辑视图名称加上指定的前缀和后缀就是指定的视图 URL 了。

    URLBasedViewResolver 支持返回的视图名称中包含 redirect: 前缀,这样就可以支持 URL 在客户端的跳转,如当返回的视图名称是 ”redirect:test.do” 的时候, URLBasedViewResolver 发现返回的视图名称包含 ”redirect:” 前缀,于是把返回的视图名称前缀 ”redirect:” 去掉,取后面的 test.do 组成一个 RedirectView , RedirectView 中将把请求返回的模型属性组合成查询参数的形式组合到 redirect 的 URL 后面,然后调用 HttpServletResponse 对象的 sendRedirect 方法进行重定向。

    同样 URLBasedViewResolver 还支持 forword: 前缀,对于视图名称中包含 forword: 前缀的视图名称将会被封装成一个 InternalResourceView 对象,然后在服务器端利用 RequestDispatcher 的 forword 方式跳转到指定的地址。

    使用 UrlBasedViewResolver 的时候必须指定属性 viewClass ,表示解析成哪种视图,一般使用较多的就是 InternalResourceView ,利用它来展现 jsp ,但是当我们使用 JSTL 的时候我们必须使用 JstlView。

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
   <property name="prefix" value="/WEB-INF/" />
   <property name="suffix" value=".jsp" />
   <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView"/>
</bean>
  • InternalResourceViewResolver
    它是 URLBasedViewResolver 的子类,所以 URLBasedViewResolver 支持的特性它都支持。在实际应用中 InternalResourceViewResolver 也是使用的最广泛的一个视图解析器。

    InternalResourceViewResolver 会把返回的视图名称都解析为 InternalResourceView 对象, InternalResourceView 会把 Controller 处理器方法返回的模型属性都存放到对应的 request 属性中,然后通过 RequestDispatcher 在服务器端把请求 forword 重定向到目标 URL 。

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/"/>
   <property name="suffix" value=".jsp"></property>
</bean>

其它视图解析器
参考链接

视图

这里写图片描述
参考链接







参考链接
参考链接
参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值