美文网首页
springmvc调用细节

springmvc调用细节

作者: 要不再等等 | 来源:发表于2019-05-23 22:50 被阅读0次

    springmvc调用流程这里就简单介绍链路上一些关键节点

    中央控制器:DispatclherServlet

    映射对应的controller中的方法:HandlerMapping

    转换参数对象:HandlerAdapter

    处理器:Handler

    逻辑视图层:ModelAndView

    视图解析器:ViewResolver

    视图:View

    其中:Handler和View层是需要我们开发的模块

    springmvc上传要自定义上传文件的大小等参数

    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
    p:maxInMemorySize="10240" p:maxUploadSize="102400000" p:defaultEncoding="utf-8">
    <description>定义上传文件的解析器,注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和</description>
    <property name="uploadTempDir" value="/tmp" />
    </bean>
    
    image.png

    HandlerExcutionChain:处理器执行链,它是包含了Handler目标方法和所有相关拦截器的对象,它是由HandlerMapping获取的。
    HandlerMapping:处理器映射器,它定义了请求到处理器之间的映射。就是说,要想通过请求找到处理器,就必须通过HandlerMapping。
    HandlerAdapter:处理器适配器,在调用目标方法之前,需要做数据初始化,数据绑定,类型转换格式化等

    问题1 :如果发送的请求没有对应的handler,那HandlerExcutionChain种的handler会不会为空呢?
    情况1 :
    实际情况是,如果配置了且配置了,就会注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver三个Bean(详细可以看练习21),其中handlerMappings中包含了SimpleUrlHandlerMapping(这个对象就是可以直接访问静态资源文件)和RequestMappingHandllerMapping(这个对象就是可以找到我们controller中的目标方法映射)。那springMVC在RequestMappingHandllerMapping找不到映射,则会认为是个静态资源,所以HandlerExcutionChain中的handler不会为空,但是最终也会报错404 + 请求路径 错误。
    情况2 :
    如果什么都没配置,那handlerMappings中只包含BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping,这两个映射器都无法获得handler,所以HandlerExcutionChain的handler为空,doDispatch会直接return 并报404错误 且没有请求路径。

    相关文章

      网友评论

          本文标题:springmvc调用细节

          本文链接:https://www.haomeiwen.com/subject/qriizqtx.html