tomcat学习

一、tomcat是什么?

  tomcat是JSP和Servlet容器,是一种轻量级应用服务器。

二、tomcat的目录结构

  |---bin   :存放启动和关闭tomcat脚步

  |---conf :存放tomcat的各种配置文件(包括server.xml和web.xml等)

  |---lib    :存放tomcat运行需要的库文件jars

  |---logs :存放tomcat运行的日记文件

  |---src   :存放tomcat的源代码

  |---webapps :Tomcat的主要web发布目录(包括应用程序示例)

  |---work  :存放jsp编译后存放的class文件

  |---doc  :存放tomcat文档

三、tomcat的组成

      

  1.Server:代表整个servlet容器

  2.Service:它由一个或者多个Connector组成,以及一个Engine,负责处理所有connector获得的所有用户请求

  3.Connector:一个Connector将在某个指定的窗口上监听客户的请求,并将请求交给Engine处理,并从Engine获得回应并返回给客户端。

         Tomcat有两个典型的Connector,一个是监听来自browser的http请求,例如8080端口;一个是监听来自其他webserver的请求的,例如8009端口。

  4.Engine :Engine下可以配置多个虚拟主机Virtaul Host,每个主机都有一个域名,当Engine获得一个请求时它会把请求匹配到对应的虚拟主机上,并把请求交给   对应的虚拟主机处理。Engine有一个默认的主机,当请求不能匹配到任何一个主机的时候,就会把请求交给默认的主机处理。

  5.Host    :代表一个虚拟主机,每一个虚拟主机和一个网络域名Domain Name相匹配,每个虚拟主机下可以部署一个或多个webApp,每个webapp对应一个           Context,每个Context都有一个Context Path,当Host接受到一个请求是,把请求匹配到对应的Context Path,并把请求交给该Context来处理。

  6.Context :一个WebApp对应一个Context,一个Context由一个或多个servlet组成,Context在创建的时候将根据配置文件$CATALINA_HOME/conf/web.xml 和$Webapp/WEB-INF/web.xml载入servlet类。

补充:

    关于第4点,对于“一个Engine下可以配置多个虚拟主机这个说法”,刚开始个人有点疑问,因为在我们在平时学习javaweb使用tomcat的时候,都没有涉及Host的设置,但是也同样可以正常使用。那么,为什么我们并没有设置虚拟主机也可以正常使用Tomcat发布项目和正常访问呢?Tomcat又是如何设置多个虚拟主机的呢?

关于问题一:我们没有设置虚拟主机也可以正常使用tomcat,是因为有默认的虚拟主机,正如上面第4点所说,当Engine获得一个请求时,回去匹配对应的Host,当没有匹配到任何一个的时候,就会交给默认的Host来处理。这里我们可以看配置文件Server.xml:

  

  1.Engine里设置了默认的主机为localhost。

  2.localhost所有的webapp就放在webapps这个目录下,这就是为什么我们没有设置主机的情况下,我们的应用都是发布在webapps这个目录下的原因。

问题二:tomcat是如何设置多个虚拟主机Host的呢?

   只需在原来的Host下边继续配置多个<Host>即可:

  

四、Tomcat的一个工作流程

  假如用户的一个请求为:http://localhost/wsota/wsota_index.jsp

1) 请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得
2) Connector把该请求交给它所在的Service的Engine来处理,并等待来自Engine的回应
3) Engine获得请求localhost/wsota/wsota_index.jsp,匹配它所拥有的所有虚拟主机Host
4) Engine匹配到名为localhost的Host(即使匹配不到也把请求交给该Host处理,因为该Host被定义为该Engine的默认主机)
5) localhost Host获得请求/wsota/wsota_index.jsp,匹配它所拥有的所有Context
6) Host匹配到路径为/wsota的Context(如果匹配不到就把该请求交给路径名为""的Context去处理)
7) path="/wsota"的Context获得请求/wsota_index.jsp,在它的mapping table中寻找对应的servlet
8) Context匹配到URL PATTERN为*.jsp的servlet,对应于JspServlet类
9) 构造HttpServletRequest对象和HttpServletResponse对象,作为参数调用JspServlet的doGet或doPost方法
10)Context把执行完了之后的HttpServletResponse对象返回给Host
11)Host把HttpServletResponse对象返回给Engine
12)Engine把HttpServletResponse对象返回给Connector
13)Connector把HttpServletResponse对象返回给客户browser

五、配置tomcat的内存的作用是什么呢?

  tomcat也是用java写的一个java程序,启动时也是一个运行在jvm上的一个java程序。

  java程序在启动时,jvm都会分配一个初始内存和一个最大内存给这个程序,初始内存和最大内存在一定程度上会影响程序的性能,例如在程序占用的内存达到最大内存的时候就需要去进行垃圾回收,自然就会影响程序的性能。所以对tomcat进行内存的配置也是如此。

六、Tomcat到底帮我们做了哪些事情呢?

  

  

  

  

  

原文地址:https://www.cnblogs.com/Zchaowu/p/7630211.html