tomcat的请求处理流程:
tomcat就是servlet容器,tomcat只关心servlet。去将servlet和url-Pattern进行匹配。
项目打包war包,去tomcat中部署.去webapps文件夹下将war包解压。去找web.xml文件。
web.xml文件中,找到servlet标签,将servlet标签中的servlet-name和servlet-class进行匹配。
tomcat启动占用一个监听端口,在操作系统之上的字节流会从端口进入到tomcat中。
然后去匹配url,找到项目中的servlet。
tomcat四大容器:
1.Engine:直接理解为一个tomcat即可,一个tomcat一个engine
List<Host> hosts
defaultHost:指定默认主机
2.Host:一个Host表示一个虚拟服务器,可以给每个Host配置一个域名
List<Context> contexts
conf下的server.xml
Host下的属性:
name就是域名地址,appBase就是应用的目录,unpackWARs是否解压war包,
<Context>中的属性path就是路径,docBase就是找servlet的路径.
3.Context:一个Context就是一个应用,一个项目
List<Wrapper> wrappers.一个应用下有多个servlet.
去找webapps下的目录,一个目录一个应用
web.xml
4.Wrapper:一个wrapper表示一个Servlet的包装.
List<Servlet> servlets.该下存的servlet都是同一个类型的.
比如说:AServlet-->Wrapper对象-->4AServlet实例。将实例存到wrapper对象中去。
编写servlet部署到tomcat中去,该类产生请求肯定会产生具体的实例,通过实例对象调用方法
在编写一个servlet时继承HttpServlet,所有请求公用一个servlet实例-->线程不安全
这个时候添加一个属性i,每次使用方法让i++,称为状态。
可以通过实现implements SingleThreadModel.使得每个请求单独使用一个Servlet实例-->线程安全
四个容器有层次结构关系:一个Engine下有多个Host,一个Host可以有多个Context,
一个Context下可以有多个Wrapper,一个Wrapper可以有多个Servlet实例对象。
总而言之,一个servlet对应一个wrapper对象,创建多个servlet实例,将多个servlet实例存到
wrapper中[List<Servlet> servlets]。然后[List<Wrapper> wrappers]
List\