我们今天来梳理一下整个请求网站的整个流程。
首先我们搭建好网站之后放在服务器上。然后配置好对应的服务器请求需要的各种配置。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里查找是否有对应的方法,当路径匹配上的时候就会找到对应的类的对应的方法。
代理:都可以用这个类的单例对象调用对应的方法。
领取专属 10元无门槛券
私享最新 技术干货