web开发的基础

简介:

在web开发的学习开始,我总是有些概念搞不清楚,这里的web开发特指在spring mvc下的开发,比如说,spring mvc和tomcat什么关系啊,为什么说tomcat是一个web server,在tomcat主页中提到的servlet container是什么意思,既然是个容器,那其中装的servlet又是什么,客户端发起的http请求到底是谁负责处理的,这些内容都在我一开始学习的时候给我造成了很大的阻碍。一个最明显的地方就是,我甚至无法分析一个springapplication的执行过程。

浅谈什么是webserver

从实体上看,webserver是一个运行在服务器应用程序,他的作用就是一直监听某个端口,响应客户端的http请求,根据请求内容,作出相应的处理,这里的相应的处理可以是服务器上静态资源的获取,当然也可以是动态计算服务的获取。前者我们可以很轻松的就可以实现,访问服务器静态资源然后封装成response返回给客户端即可。但是后者就显得有些麻烦,早期的实现也相当直接,我只要根据不同的访问要求,然后去执行服务器不同的计算程序即可。而这个通过http调用本机不同服务程序的转换接口就是CGI(common gate interface)。执行过程如下图所示:

这样的处理的方法是服务端需要为每个服务请求都开一个进程,在早期网络服务还不发达的时候尚且可以接受,但是随着网络服务的发展,当服务量过大的时候,服务器端的计算资源肯定吃不消。所以servlet的概念就诞生了。

servlet是实际上也是webserver的一个概念,只不过他是由java所定义的接口标准,我们首先看下图:

通过图示我们可以看到,客户端不同的请求实际上是通过不同的线程转发给servlet的,最终由servlet完成计算服务,然后将结果封装回webserver,最终返回给用户。这样做的好处就是大大减轻了服务端的压力,因为我们知道,线程的创建所消耗的资源是要小于进程的。

总结一下,webserver主要的作用就是帮助我们进行http连接的管理,我们只需要关注实际的计算过程。而无需过多的关注网络连接的维护。

什么是tomcat

简单来讲,tomcat就是webserver的java具体实现(其中之一)。主要实现了servlet container和jsp。前者对应mvc中的controller,后者对应view。为什么叫servlet container呢?我们都知道在面向对象的java中,无论是数据还是计算最终都是由一个个的实例对象完成的。因此我么要想相应客户端的某些请求,就必须通过实例化与之对应的servlet实现。如果我们自己管理对象,可能会出现的较多的问题,因此tomcat帮我们将这些servlet统一管理在了servlet container中,用容器统一管理servlet的生命周期和所需的依赖关系。

讲了这么多,还是贴一张图更能说明问题:

我们可以看到,实际上servlet就是一个接口规范,用来统一http和服务器的具体计算线程。

spring mvc与tomcat的交互

这里其实不单单是指tomcat,任何实现了servlet标准的web容器,都可以与spring mvc进行交互。spring mvc的策略就是通过请求分发中心:DispatcherServlet来实现的。具体做法就是在spring boot启动时,将DispatcherServlet注册到具体使用的实现了servlet标准的web容器中。http消息依然由web server具体负责,而webserver将其接收到的http消息封装为servlet request,然后通过DispatcherServlet统一的进行分发,然后去执行与之对应的用户自定义的处理器方法。这样就完成了实际计算代码和http请求的解耦合。使得开发人员只需关注具体的计算过程即可,并不需要关注如何将计算结果返回给客户端。大大减轻了开发人员的工作,同时也提升程序开发的鲁棒性。

参考:

servlet详解:什么是servlet

深入理解spring mvc源代码:p198

posted @ 2020-06-15 01:15  smalllll  阅读(98)  评论(0编辑  收藏  举报