servlet context,spring context,spring mvc context

0.抽象思维:

        软件体系中抽象思维很重要,软件本质上是一个工具,一个帮助解决现实问题的工具。软件里面的很多看似很高深的概念,其实都能在现实世界中找到对应的场景或者事物。也就是说,软件世界是对现实世界的抽象,理解软件时如果搞清楚这是对现实世界的什么东西的抽象,能很好地帮助理清思路,看清本质。

0.分层思想:

        一个复杂的问题要想一次性完全弄清除往往很难,涉及到的元素太多,元素间的关系太复杂,千头万绪,顾此失彼。这时候,我们可以借鉴“大事化小小事化了”的思想,像剥洋葱一样一层层去剥,往往会把复杂问题简单化。这里的层也不是随便乱分的,一个好的分层方案一定是能和现实中待解决问题的本身特性相关的,这也是上文说的抽象。比如说下文即将介绍的Tomcat的各个组件间的关系。

一、Context(上下文):

        在网络服务开发中,会遇到很多Context,Context是什么?某个软件(比如tomcat)或则某个组件(spring mvc)抽象来看,是一个对外提供服务的实体,可以把它比喻成一个服务公司。公司对外提供服务需要一个服务场所,比如办公室,办公室里有办公桌、白班、电话等工作必需材料,服务所有的操作都借助这些材料在该办公室进行。这个“服务场所”,就是一个Context。它的作用:一是提供服务所需的工具(参数)、空间、保存中间成果(数据)等环境;二是隔离,就是该服务相关的东西在且只在这个Context,里面各个方法产生的数据等只在这个Context起作用。

二、Tomcat(web服务器):

Tomcat自上而下大体上有这么几个组件(抽象):Server,Service,Connector,Container,Engine,Context,Host。他们之间有上下层级关系。

Server是对整个Web服务(Tomcat)的抽象,他是最顶级抽象,有且只能有一个。类比一个公司整体。它有port="8005" shutdown="SHUTDOWN"两个属性,用来指定关闭Tomcat的端口。

Service是对某个服务的抽象。类比公司里的一个独立的生产线,一个公司可能有一个或者多个生产线。一个tomcat可能运行一个或多个Service。每个Service对应Tomcat下的一个webapp文件夹,多个Service对应多个webApp文件夹。它有个name属性,作为ID使用。Service包含Connector和Container两大组件,一个“主外”,一个“主内”。

Connector连接器负责接收网络请求,一个Service可以接收发往不同端口的多个请求,也就是可以有多个Connector。每个Connector其中有两个属性是port="8080" protocol="HTTP/1.1"。组成一个端口-协议对。

Container负责处理请求,它是一个接口。Engine,Host,Context,Wrapper都是Container的实现,他们之间有父子层级关系Engine>Host>Context>Wrapper。父子间是一对多的关系。

Engine是Container的实现,是顶级容器。Engine有个name属性,作为ID,还有个defaultHost=“localhost”。当请求的host不能匹配Tomcat配置的任何一个Host,则默认选择该Host去处理;

Host:顾名思义,就是对应一个host,通过name属性去指定处理哪个host请求。appBase属性指定项目文件在tomcat中的位置。

Context:Host的子容器,对应一个模块,一般通过第一级目录(path属性指定)来区分。他的docBase属性指定对应的项目文件在tomcat中的位置,一般指定为相对于Host的appBase属性指定的路径的相对路径。这就是传说中的Servlet容器,用来管理Servlet。

Wrapper:对应一个Servlet。

Tomcat启动时会读取响应的web.xml文件来初始化web项目,包括创建监听器,servlet等,但是springboot项目没有web.xml配置文件,是通过javax.servlet.ServletContainerInitializer实现类来实现的。

(未完待续)

你可能感兴趣的:(servlet context,spring context,spring mvc context)