zoukankan      html  css  js  c++  java
  • Spring MVC的UrlBasedViewResolver和InternalResourceViewResolver

    Spring MVC使用ViewResolver来根据controller中返回的view名关联到具体的View对象。使用View对象来渲染返回值以生成最终的视图,如html,json或pdf等。

    Spring MVC中,通过在servlet context配置文件中配置的ViewResolver Bean对象来注册ViewResolver对象,其在spring mvc的dispatcherServlet中的使用过程其实和之前提到的HandlerMapping和HanderAdapter类似。

    DispatcherServlet初始化时,首先根据当前context中注册的Beans中实现了ViewResolver接口的Bean列表来生成ViewResolver对象列表,并根据这些ViewResolver中的order属性进行排序,如果没配置order属性则此ViewResolver的优先级最低。

    当HandlerAdapter调用完毕handler method返回view对象时,dispatcherServlet将根据当前已经注册了的ViewResolver列表的顺序去调用其中的resolveViewName方法,以根据viewName找到实际对应的View对象,并根据第一个返回的View对象中的render方法来生成最终的用户视图。

    与HandlerMapping和HanderAdapter类似,DispatcherServlet也提供了参数来允许用户指定是否只加载自己的ViewResolver,当属性detectAllViewResolvers设置为false时,则spring mvc将查找名为viewResolver的bean 来作为当前唯一的ViewResolver。

            <init-param>
    <param-name>detectAllViewResolvers</param-name>
    <param-value>false</param-value>
    </init-param>

    UrlBasedViewResolver与InternalResourceViewResolver

    之前的例子中,为将返回的viewname映射到对应的jsp上,在servlet context 配置文件中是这么定义的

    复制代码
        <bean id="viewResolver"
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass"
    value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
    </bean>
    复制代码

    这个定义的含义是指UrlBasedViewResolver将使用JstlView对象来渲染结果,并将handler method返回的modelAndView基础上,加上目录前缀/WEB-INF/jsp/和文件名称后缀.jsp。例如结果返回的viewName为helloworld,则对应的实际jsp为/WEB-INF/jsp/helloworld.jsp

    当返回的viewName的前缀为forward:时,spring mvc将结果通过forward的方式转到对应的视图,例如forward:helloworld。这也是spring mvc缺省的使用模式。

    当返回的viewName的前缀为redirect:时,spring mvc将结果通过redirect的方式转到对应的视图。例如redirect:helloworld

    InternalResourceViewResolver为UrlBasedViewResolver的子类,它将InternalResourceView作为缺省的View类,如果当前classpath中有jstl的jar包时则使用JstlView作为缺省的view来渲染结果。因此以下使用InternalResourceViewResolver的定义应该和之前使用UrlBasedViewResolver定义的viewresolver的作用相同。

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

    除此之外,InternalResourceViewResolver还提供了
    alwaysInclude属性来要求返回的结果使用include方式而不是forward方式
    exposeContextBeansAsAttributes属性以将当前spring 环境中的 beans作为request   attritbutes来暴露到页面上。
    exposedContextBeanNames属性来限制能够暴露到页面上的spring bean的名称列表。

  • 相关阅读:
    苹果所有常用证书,appID,Provisioning Profiles配置说明及制作图文教程(精)
    使用tcpdump抓取HTTP包
    android保持在休眠时,后台程序继续运行(让程序获取设备电源锁)
    insert数据时,获取插入数据的id
    Android学习笔记(五五):通知Notification(下)
    apk反编译与android项目代码混淆
    android 解决横竖屏切换时重新载入的问题
    android中往字符串数组动态添加元素
    error 25015安装程序集“C:WindowsMicrosoft .NETFrameworkv2.0.50727xxx.dll”失败,原因是出现了系统错误:另一个程序正在使用此文件,进程无法访问
    win7 安装vs2013后无法连接远程数据库,出现如下提示的解决方法
  • 原文地址:https://www.cnblogs.com/liaojie970/p/5525466.html
Copyright © 2011-2022 走看看