zoukankan      html  css  js  c++  java
  • Spring 梳理

    1. ContentNegotiatingViewResolver,这个视图解析器允许你用同样的内容数据来呈现不同的view。它支持如下面描述的三种方式:
      1. 1)使用扩展名
        http://localhost:8080/employees/nego/Jack.xml  返回结果为XML
        http://localhost:8080/employees/nego/Jack.json 返回结果为JSON
        http://localhost:8080/employees/nego/Jack  使用默认view呈现,比如JSP

        2) HTTP Request Header中的Accept,Accept 分别是 text/jsp,  text/pdf,  text/xml,  text/json,  无Accept 请求头

        3) 使用参数
        http://localhost:8080/employees/nego/Jack?format=xml  返回结果为XML
        http://localhost:8080/employees/nego/Jack?format=json 返回结果为JSON

    2.  ContentNegotiatingViewResolver 可以一个@RequestMapping,返回多个view。
    3. 配置
      1. <property name="favorPathExtension" value="true"></property> 是否启用扩展名支持,默认是true

        <property name="favorParameter" value="false"></property> 是否启用参数支持,默认是true

        <property name="ignoreAcceptHeader" value="true"></property> 是否忽略掉accept header,默认就是false


      2. spring 给我们提供了 ContentNegotiationManagerFactoryBean这是推荐的方式。 配置上类似。
        1. <bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
                  <property name="ignoreAcceptHeader" value="true"/>
                  <property name="favorPathExtension" value="true"/>
                  <property name="defaultContentType" value="text/html"/>
                  <property name="favorParameter" value="true"/>
                  <property name="mediaTypes">
                      <map>
                          <entry key="xml" value="application/xml"/>
                          <entry key="json" value="text/plain"/>
                          <entry key="xls" value="application/vnd.ms-excel"/>
                      </map>
                  </property>
              </bean>
        2. <bean id="viewResolver"
                    class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
                  <property name="contentNegotiationManager" ref="cnManager"/>
                  <property name="viewResolvers"><!-- 针对freemarker的视图配置 --> 
                      <list>
                          <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
                              <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"/>
                              <property name="viewNames" value=".ftl"/>
                              <property name="contentType" value="text/html; charset=utf-8"/>
                              <property name="cache" value="true" />
                              <property name="prefix" value="" />
                              <property name="suffix" value="" />
                              <property name="order" value="2"/>
                          </bean>
                          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
                              <property name="prefix" value="/WEB-INF/view/jsp/"></property><!-- 配置页面路径 -->
                              <property name="suffix" value=".jsp"></property><!-- 文件以value值结尾 -->
                          </bean>
                      </list>
                  </property>
                  <property name="defaultViews">
                      <list>
                          <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                              <!-- <property name="extractValueFromSingleKeyModel" value="true"/> -->
                              <property name="prettyPrint" value="true"/>
                              <property name="contentType" value="text/plain"/>
                          </bean>
                          <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                              <constructor-arg ref="jaxb2Marshaller">
           
                              </constructor-arg>
                          </bean>
                          <bean class="com.wonders.stpt.bid.controller.JXLExcelView"/>
                      </list>
                  </property>
              </bean>
        3. defaultViews的作用:在defaultViews里注册的视图会在ContentNegotiationViewResolver中注册自己支持的内容类型

        4. ContentNegotiationManagerFactoryBeanmediaTypes决定响应的内容类型
        5. 当contentNegotiationManager决定好响应的内容类型后,ContentNegotiationViewResolver就会根据该内容类型选择一个兼容的View进行渲染输出
        6. 一旦有View对请求内容匹配,就直接渲染输出,不会进行ViewResolver的查询。
        7. 当注册的内容类型都不兼容时,会查询viewResolver中的ViewResolver是否支持该请求,如果ViewResolver表示支持该请求,那么就由该ViewResolver负责视图渲染,如果ViewResolver表示不支持该请求,则查询下一个ViewResolver,直至所有的ViewResolver查询完毕。
      3. 默认是支持path 后缀拓展方式, 也支持accept 请求头,但不支持 format 参数的
  • 相关阅读:
    书列君荐书|《福尔摩斯探案大全集》.(英)阿瑟.柯南道尔.扫描版
    anaconda同时集成Python2 和 Python3
    python 使用sqlite,ConfigParser实例
    python 爬虫爬取历年双色球开奖信息
    关于python 爬虫遇到的反盗链
    CentOS7搭建Docker私有仓库----Docker
    Ansible + shell 实现部署fastdfs+nginx 实现图片服务器并提供动态缩放功能;
    python+fastdfs+nginx实现打包下载功能
    监控生产服务器内存使用前十
    python操作MySQL--实例
  • 原文地址:https://www.cnblogs.com/jiangtao1218/p/10205166.html
Copyright © 2011-2022 走看看