spring-mvc框架反射和动态代理处理请求

我们今天来梳理一下整个请求网站的整个流程。

首先我们搭建好网站之后放在服务器上。然后配置好对应的服务器请求需要的各种配置。tomcat,mysql等。

然后用户通过我们的域名访问访问我们的网站,dns代理服务器把请求信息解析,把请求打在我们的tomcat服务器上。

然后我们的服务器不断去对应开启的端口询问是否有请求,得到请求之后我们的服务器开始处理请求,然后把请求结果返回给客户端。

注意:我们各个电脑之间的交流是由端口进行交互的。每个进程都会占有对应的端口,但是本身java并不会占用端口,而是java编译之后在jvm执行class文件的时候通过操作系统来占用端口。为什么我们其他进程都有各自的接口呢?其实每个进程占有接口的时候都有自己的约定,怎么解析对应的请求等。如果多个进程都用一个接口,会不知道怎样解析。所以操作系统只会允许一个端口只会被一个进程占用。

那么具体server是怎么处理请求的呢?这是我们今天讨论的主要问题:

首先我们启动服务器,在启动过程中加载web.xml文件。来看看xml配置文件。

然后看看spring-mvc里面的配置:

上面对应的标签的功能已经标注。其中的context-param属于上下文参数,整个web项目都可以引用他。而其中的name和value会转化成对应的key和value。然后会加载spring-mvc.xml配置文件。在上面的图片可以看到context:component-scan标签中指定我们要扫描的包。然后在执行的时候会对我们自己的项目进行检索。当在扫描时遇见@controller就会加载对应的java类,并通过单例模式生成一个对象。在加载类的过程中遇见@RequestMapping标记对应的方法存放在map里。其中的key是指路径,value对应类路径和该类的方法签名。

注:方法签名是指能够唯一表示该方法(包括方法名和方法参数)

存放在map中的key值存储的是访问controller的路径(通过spring-mvc映射过来的路径。value后面等于的路径)。

value是对应要访问的方法包括该方法的所在类的具体位置。spring-mvc是通过反射加代理的方式处理请求。

反射:当有请求过来的时候会去map里查找是否有对应的方法,当路径匹配上的时候就会找到对应的类的对应的方法。

代理:都可以用这个类的单例对象调用对应的方法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181217G0VN5C00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券