前言

tomcat:一个web容器(servelt和jsp容器),用来进行前后端交互的一个中间商,解析客户端发送过来的数据解析成request和response对象,来进行一个请求与响应,tomcat解析服务端的response内容,在发送给客户端进行一个响应。

servlet:是service和applet的一个缩写,服务端小程序,处理从客户端拿到的数据,并作出响应。

1.Servlet

1.servlet结构图

HttpServelt继承了GenericServlet抽象类(为了以后进行拓展,可能不止有http协议,可能拓展其他协议,GenericServlet规定了除协议外的其他内容),GenericServlet实现了IO序列化接口,ServletConfig(Servlet的的配置信息),和Servlet接口(核心包含servlet初始化销毁等一系列方法)。

 2.HttpServlet

HttpServlet中方法请求Service有两个一个是重写的service(ServletRequest,ServletResponse),是默认调用此方法,然后调用重载的service(HttpServletRequest,HttpServletResponse)方法,该方法会根据类型去调用doGet或doPost方法。

2.GenericServlet 

 

 一种定义处理关于请求处理的其他信息,init(ServletConfig),getServletConfig()等等 

3.Servlet

 Servlet 核心接口,关于servlet的初始化,销毁,请求调用,servlet的配置信息(ServletConfig),servlet的创建信息(getServletInfo)。

4.ServletConfig

 ServletConfig是属于当前的Servlet的对象的,有当前servlet的一些配置信息,如获得Servlet的名字,获取在web.xml中配置的的 init-param 中的配置参数,还可以获取Servlet的上下文ServletContext(全局)对象。

 2.Tomcat

1.Tomcat架构图

server对应的tomcat容器,一个server对应的多个service用来提供具体服务,一个service(是接收请求,完成对应的业务逻辑)对应多个connector,用来接收浏览器的请求封装成Request和Response然后交给container(核心组件层级有Engine,Host,Context,Wrapper)处理讲结果返回给connector,Engine标识一个servlet引擎一个Engine可以有多个Host,一个Host代表一个虚拟站点(虚拟主机)可以有多个Context,一个Context代表一个程序(一个web.xml),一个运行的webapp都是以Context的形式存在,都有一个根路径和访问路径,整个webapp是一个站点(Host),一个应用是一个Context。

1.Server

<Server port="8005" shutdown="SHUTDOWN">

8005端口,接收服务器停止命令

2.Service

Service接收客户端请求,一个Server对应Service,Service 接收客户端的请求,然后解析请求,完成相应的业务逻辑,然后把处理后的结 果返回给客户端,一般有两个方法,一个start打开服务socket,stop停止服务并释放网络资源。

3.Connector

Connector连接器,service核心组件之一,一个service对应多个Connector,主要处理客户端请求,讲请求封装成Request和Response,给Container容器处理,处理完交给Connector返回客户端。

<Connector port="8888" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

4.Container

Service 的另一个核心组件,按照层级有 Engine Host Context Wrapper 四种,一个
Service 只有一个 Engine ,其主要作用是执行业务逻辑。

5.Engine

一个Service中对应一个Engine,Engine表示一个Servlet引擎。

<Engine name="Catalina" defaultHost="localhost">

一个Engine包含多个Host,使得一个服务器实例可以承担多个域名的服务。

6.Host

Host代表一个站点,对应的一个域名,一个Host对应多个Context

 <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">

unpackWARs 代表指定在appBase指定目录中的war包做自动的解压

aotoDeployed 代表指定加入到appBase目录的war包进行自动部署

7.Context

Context代表一个应用程序,每一个运行的webapp最终都表现为一个Context,每一个Context都有一个跟路径和请求路径。

与 Host 的区别是 Context 代表一个应用,如,默认配置下 webapps 下的每个目录都是一个应用,其中 ROOT 目录中存放主应用,其他目录存放别的子应用,而整个 webapps 是一个站点。

2.启动Tomcat

  1. startup.bat
  2. catalina.bat start

catalina.bat源码

  1. set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"  //启动程序jar
  2. set MAINCLASS=org.apache.catalina.startup.Bootstrap  //入口程序地址
  3. set ACTION=start   //args第一个参数

下载tomcat6源码分析

  1. main中调用init()方法 加载类加载器,通过反射创建Catalina实例(因为Catalina没有实现Lifecycle(提供了统一管理对象声明周期的接口)接口)
  2. catalina  先load() 通过Digester解析server.xml文件
  3. demon.start()  条用Catalina的start方法
  4. StandardServer 是server的一个实现类,通过initalize()方法初始化Tomcat容器一些列组件,顺序是StandardServer,StandardService,StandardEngine,Connector。
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐