zoukankan      html  css  js  c++  java
  • spring mvc 关键接口 HandlerMapping HandlerAdapter

    HandlerMapping 
    Spring mvc 使用HandlerMapping来找到并保存url请求和处理函数间的mapping关系。 
      
    以DefaultAnnotationHandlerMapping为例来具体看HandlerMapping的作用 
      DefaultAnnotationHandlerMapping将扫描当前所有已经注册的spring beans中的@requestmapping标注以找出url 和 handler method处理函数的关系并予以关联。 

    Handleradapter 
    Spring MVC通过HandlerAdapter来实际调用处理函数。 
    以AnnotationMethodHandlerAdapter为例 
    DispatcherServlet中根据handlermapping找到对应的handler method后,首先检查当前工程中注册的所有可用的handlerAdapter,根据handlerAdapter中的supports方法找到可以使用的handlerAdapter。通过调用handlerAdapter中的handle方法来处理及准备handler method中的参数及annotation(这就是spring mvc如何将reqeust中的参数变成handle method中的输入参数的地方),最终调用实际的handle method。 

    detectAllHandlerMappings 
    缺省情况下spring mvc 将加载 当前系统中所有实现了HandlerMapping接口的bean。如果只期望spring mvc加载指定的handlermapping时,可以修改web.xml中的DispatcherServlet的初始参数,将detectAllHandlerMappings的值设置为false 

    Xml代码  收藏代码
    1. <init-param>  
    2.     <param-name>detectAllHandlerMappings</param-name>  
    3.     <param-value>false</param-value>  
    4. </init-param>  


    此时spring mvc将查找名 为“handlerMapping”的bean并作为当前系统中唯一的handlermapping。 
    如果没有定义handlerMapping的话,则spring mvc将按照org.springframework.web.servlet.DispatcherServlet所在目录下的DispatcherServlet.properties中所定义的org.springframework.web.servlet.HandlerMapping的内容来加载缺省的handlerMapping(用户没有自定义Strategies的情况下)。 

    detectAllHandlerAdapters 
    作用和detectAllHandlerMappings类似,只不过作用对象为handlerAdapter。亦可通过 

    Xml代码  收藏代码
    1. <init-param>  
    2.     <param-name>detectAllHandlerAdapters</param-name>  
    3.     <param-value>false</param-value>  
    4. </init-param>  


    来强制系统只加载bean name 为” handlerAdapter”handlerAdapter。加载不到的情况下将按照DispatcherServlet.properties中所定义的org.springframework.web.servlet.HandlerAdapter的内容来加载缺省的handlerAdapter。 

  • 相关阅读:
    sqlite表结构动态读取工具(Chole ORM框架)
    tomcat可以访问默认页面,但是无法访问webapp下的指定项目
    C#连接solr时提示 java内存异常 (jetty和tomcat哪个更High) java.lang.OutOfMemoryError
    Service Mesh
    Java 使用 UnixSocket 调用 Docker API
    ffmpeg-python 任意提取视频帧
    应用性能测试神器 Gatling,你用过吗?
    多语言应用性能监控系统:Elastic APM
    Ceph Plugin
    MAC iterm2 常用快捷键大全
  • 原文地址:https://www.cnblogs.com/luoluoshidafu/p/6854333.html
Copyright © 2011-2022 走看看