一:tomcat实际上就是一个实现了tcp,http等协议的java程序,用来充当服务器(启动后默认监听8080端口,而浏览器就是客户端),有时也充当web容器。而servler就是web容器,web服务器如tomcat就是通过它来处理请求,简单概括就是,通过tomcat,我们可以把我们自己写的jsp,html等暴露供浏览器访问。
二:tomcat的基本组成:
1.server:可以监听某固定的端口,可以向该端口发送shutdown关闭命名
2.service:组件容器,包含了以下的组件
3.connector:监听组件,可以开启监听套接字,监听外界请求,并建立连接,还可以解析请求(协议及数据),并把这些信息发给engine,也可以响应数据
4.container:是一个容器,包含了engine,host,context和wrapper四个容器
5.engine:接收从connector传来的信息,并把信息发送给匹配的虚拟主机,一个engine可以配置多个host虚拟主机
6.host:定义虚拟主机,可以为每一个webapp指定根目录
7.context:局部上下文主要是根据Path和docBase获取项目的路径信息,部署项目时自动在host结点下创建该结点;全局上下文的context在context.xml文件里,该上下文定义了web.xml的位置,context会把所有信息交给wrapper进行处理
8.wrapper:wrapper代表一个servlet,对应servlet的处理过程,根据context提供的信息解析对应的web.xml文件,开始servlet的生命周期和负责装载对应的类
9.excutor:为每一个Service组件提供线程池,使得engine可以从线程池中获取一个线程来处理请求
三:tomcat处理静态资源过程(通过客户端发起访问一个jsp页面的过程)
请求:https://myhost:8080/helloWord/hello.jsp
当客户端访问该请求时,connector组件会监听到请求,解析该请求然后交给engine容器
engine容器匹配名为myhost的虚拟主机,并把对应参数传给虚拟主机,虚拟主机结合项目上下文context结点前往根目录下匹配项目。找到helloword,并把数据信息·交给全局上下文context.xml下的Context组件
Context将信息交给wrapper,wrapper根据Context提供的信息找到web配置文件web.xml,wrapper先去寻找helloword工程的私有web.xml,如果没有该请求的映射信息,则寻找全局即tomcat的web.xml(context.xml中的context结点定义了默认路径)
再通过servlet-,mapping结点匹配到对应的servlet结点,再通过servlet结点匹配到对应的Servlet类(如专门用来解析jsp的JspServlet)。JspServlet解析jsp页面,生成response,wrapper再把响应交给connector,从而返回给客户端
处理静态资源也差不多,只是不需要解析到全局web.xml,因为不需要用到JspServlet解析就可以直接返回给客户端了
注:connector,engine,host,局部context(项目部署了才有)组件可以在tomcat的servler.xml文件中找到,,全局context可以在context.xml下找到