Tomcat-Start-XXOO

Tomcat的下载和安装

Tomcat 官网下载解压版或者.exe安装版本

https://tomcat.apache.org/

安装解压后目录如下

 

tomcat根目录在tomcat中叫<CATALINA_HOME>

<CATALINA_HOME>/bin:存放各种平台下启动和关闭Tomcat的脚本文件.其中 有个档是catalina.bat,打开这个windos配置文件,在非注释行加入JDK路径,例如 : SET  JAVA_HOME=C:\j2sdk1.4.2_06 保存后,就配置好tomcat环境了. startup.bat是windows下启动tomcat的文件,shutdown.bat是关闭tomcat的文件.

 

<CATALINA_HOME>/conf:存放不同的配置文件(如:server.xml和web.xml); 

  server.xml文件:该文件用于配置和server相关的信息,比如tomcat启动的端口号、配置host主机、配置Context

  web.xml文件:部署描述文件,这个web.xml中描述了一些默认的servlet,部署每个webapp时,都会调用这个文件,配置该web应用的默认servlet。

  tomcat-users.xml文件:配置tomcat的用户密码与权限。

  context.xml:定义web应用的默认行为。

<CATALINA_HOME>/lib:存放Tomcat运行需要的库文件(JARS); 

<CATALINA_HOME>/logs:存放Tomcat执行时的LOG文件; 

<CATALINA_HOME>/temp: 

<CATALINA_HOME>/webapps:Tomcat的主要Web发布目录(包括应用程序示例); 

<CATALINA_HOME>/work:存放jsp编译后产生的class文件; 

 

配置文件$CATALINA_HOME/conf/server.xml的说明:

 

<!----------------------------------------------------------------------------------------------->

<!-- 启动Server 在端口8005处等待关闭命令 如果接受到"SHUTDOWN"字符串则关闭服务器 -->

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

<!-- Listener ??? 目前没有看到这里 -->

<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" debug="0"/>

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" debug="0"/>

<!-- Global JNDI resources ??? 目前没有看到这里,先略去 -->

<GlobalNamingResources>

... ... ... ...

</GlobalNamingResources>

<!-- Tomcat的Standalone Service Service是一组Connector的集合 它们共用一个Engine来处理所有Connector收到的请求 -->

<Service name="Tomcat-Standalone">

<!-- Coyote HTTP/1.1 Connector className : 该Connector的实现类是org.apache.coyote.tomcat4.CoyoteConnector port :

在端口号8080处侦听来自客户browser的HTTP1.1请求 minProcessors : 该Connector先创建5个线程等待客户请求,

每个请求由一个线程负责 maxProcessors : 当现有的线程不够服务客户请求时,若线程总数不足75个,则创建新线程来处理请求

acceptCount : 当现有线程已经达到最大数75时,为客户请求排队 当队列中请求数超过100时,后来的请求返回Connection refused

错误 redirectport : 当客户请求是https时,把该请求转发到端口8443去 其它属性略 -->

<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"

port="8080"

minProcessors="5" maxProcessors="75" acceptCount="100"

enableLookups="true"

redirectPort="8443"

debug="0"

connectionTimeout="20000"

useURIValidationHack="false"

disableUploadTimeout="true" />

<!-- Engine用来处理Connector收到的Http请求 它将匹配请求和自己的虚拟主机,

并把请求转交给对应的Host来处理默认虚拟主机是localhost -->

<Engine name="Standalone" defaultHost="localhost" debug="0">

<!-- 日志类,目前没有看到,略去先 -->

<Logger className="org.apache.catalina.logger.FileLogger" .../>

<!-- Realm,目前没有看到,略去先 -->

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" .../>

<!-- 虚拟主机localhost appBase : 该虚拟主机的根目录是webapps/ 它将匹配请求和

自己的Context的路径,并把请求转交给对应的Context来处理 -->

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

<!-- 日志类,目前没有看到,略去先 -->

<Logger className="org.apache.catalina.logger.FileLogger" .../>

<!-- Context,对应于一个Web App path : 该Context的路径名是"",故该Context是该Host的

默认Context docBase : 该Context的根目录是webapps/mycontext/ -->

<Context path="" docBase="mycontext" debug="0"/>

<!-- 另外一个Context,路径名是/wsota -->

<Context path="/wsota" docBase="wsotaProject" debug="0"/>

</Host>

</Engine>

</Service>

</Server>

<!----------------------------------------------------------------------------------------------->

详细可参考http://docs.huihoo.com/apache/tomcat/heavyz/01-startup.html

Tomcat处理http请求的过程

假设来自客户的请求为:

http://localhost:8080/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