zoukankan      html  css  js  c++  java
  • 002649:spring下dispatcherServlet执行原理

    一、背景

      1、今天在调试一个开源项目,在构造param:{}对应controller(@JParam("param") DictQuery query)时,query一直是null   
      2、request对象不知道在哪可以看到我前端传后台的值,于是一阵忙调。   
      3、于是下定决心了解下一个web请求从进入到最后返回都经历了什么。

    二、具体分析

      

      a、@RequestBody和@ResponceBody对对应处理器是RequestResponseBodyMethodProcessor。   
      b、在处理流程中每个requestMapping对应一个MappedHandler,先根据请求获取handler,在根据handler找到可以处理它的adapter。  
      c、adapter在处理是就将请求/返回、拦截器等放到一个methodHandler中,通过这个handler完成出入参的转换以及controller方法的调用。
      d、无论是入参和出参的解析,都是先找到Processor(一般是根据注解),在根据contentType找到具体的messageConvert。

    三、结论

      1、背景中的问题,查询到最后是因为前段无法构造param:{}数据类型导致的,因为后台根据param去request.getParameter中取查找是返回为空,所有query也就为空了。   
      2、但使用@Request注解后,是直接冲request的流中取出所有整体转换的,所有在前端不在使用param:{}直接传后边部分的前提下,这种方式是可以执行成功的。

    其他

      1、传的入参在request.getInputStream / request.getParameterMap()中,可以通过将流中内容转换为字符串输出来查看。

    参见 :https://www.cnblogs.com/tengyunhao/p/7518481.html

  • 相关阅读:
    【长沙集训】2017.9.11
    Miller-Rabin素数测试
    数论模板
    树状数组 区间修改+区间查询
    POJ 2104:K-th Number 整体二分
    Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
    redhat6.5 配置使用centos的yum源
    Failed to start firewalld.service: Unit firewalld.service is masked
    CentOS7安装iptables防火墙
    Linux下的tar压缩解压缩命令详解
  • 原文地址:https://www.cnblogs.com/ws563573095/p/10318209.html
Copyright © 2011-2022 走看看