Tomcat
Tomcat是SUN公司推出的优秀Servlet容器,是一款完全由Java语言编写的开源的稳定、可靠、高效率软件。
Tomcat的组成结构:Tomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。各个组件在server.xml文件中对应一种配置元素。
<Server>顶层元素,可以包含多个service组件
<Service>顶层元素,包含一个Engine组件,可以有多个Connector组件
<Connector />代表介于客户端与服务器之间的通信接口,负责将客户请求发送给服务器,并将服务器响应返回给客户
<Engine>Engine组件为特定的service组件处理所有客户请求,处理同组Connector所有请求,可以有多个Host
<Host>Host组件为特定的虚拟主机处理所有客户请求,可以有多个web应用,即多个Context
<Context>Context组件为特定的web应用处理所有客户请求,代表了单个的web应用
Cluster组件负责为Tomcat集群系统进行会话复制、Context组件的属性复制,以及群集范围内WAR文件的发布
</Context>
</Host>
</Engine>
</Service>
<Server>
Linux系统设置CATALINA_HOME环境变量,根据不同的shell使用不同的方式:
bash CATALINA_HOME=/home/tomcat;export CATALINA_HOME
tsh setenv CATALINA_HOME /home/tomcat
Tomcat目录结构:是由自身的实现决定的,与Servlet规范无关
/bin:所有的可执行命令,启动和关闭服务器startup/shutdown
/conf:服务器的配置文件夹,保存了各种配置信息:server.xml
/lib:Tomcat服务器所需要的各个库文件,Tomcat和web应用都可以访问,JavaWeb应用的lib目录只能被当前应用访问
/logs:保存服务器的系统日志
/webapps:web应用的默认存放目录
/work:Tomcat的工作目录,生成所有的临时文件(*.java、*.class)JSP编译后的Servlet类文件
----------------------
Servlet容器响应客户请求特定Servlet的流程:
①客户发出请求访问特定Servlet②Servlet容器收到客户请求,对其解析③Servlet容器创建一个ServletRequest对象,在ServletRequest对象中包含了客户请求信息及其他关于客户的信息,如请求头、请求正文、以及客户机的IP地址等④Servlet容器创建一个ServletResponse对象⑤Servlet容器调用客户请求的Servlet的service()方法,并把ServletRequest对象和ServletResponse对象做为参数传给该服务方法⑥Servlet从ServletRequest对象可获取客户的请求信息⑦Servlet利用ServletResponse对象来生成响应结果⑧Servlet容器把Servlet生成的响应结果发送给客户端
Tomcat的类加载器负责为Tomcat本身及JavaWeb应用加载相关的类,查找顺序:
①在JavaWeb应用的WEB-INF/classes目录查找②在WEB-INF/lib查找③在Tomcat的lib目录查找④在Tomcat的lib目录下的Jar文件中查找
=====Tomcat配置及优化=====
修改默认端口号conf/server.xml 修改端口port8080->80
配置虚拟目录:在conf\server.xml中的<Host>标签内添加:<Context path="/hzweb" docBase="D:/wwweb" reloadable="true" />
<Context>元素是Tomcat中使用最频繁的元素,它代表了虚拟主机<Host>上的单个web应用。
path:指定该web应用的URL入口
docBase:指定web应用的文件路径,可以给绝对路径,也可以给相对于<Host>的appBase属性的相对路径
className:指定实现Context组件的Java类的名字,这个Java类必须实现org.apache.catalina.Context接口,该属性默认值为org.apache.catalina.core.StandardContext
reloadable:设置为true,Tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下的class文件的改动,以及监视web应用的WEB-INF/web.xml文件的改动。如果有更新,服务器会自动重新加载web应用。在发布阶段要改为false,可以降低Tomcat的运行负荷,提高Tomcat的运行性能
cachingAllowed:默认为true,表示允许启动静态资源的缓存。使用缓存能提高访问静态资源的效率
cacheMaxSize:默认值为10240(10M),设定静态资源缓存的最大容量,以K为单位。
workDir:指定Web应用的工作目录。Tomcat在运行时会把与这个Web应用相关的临时文件放在此目录下
uppackWar:默认值为true,表示将把Web应用的WAR文件展开为开放目录结构后再运行,如果设为false,则直接运行WAR文件
加载Web应用时,会依照以下五种方式尝试查找Web应用的<Context>元素:
①<CATALINA_HOME>/conf/context.xml 此<Context>元素信息适用于所有Web应用
②<CATALINA_HOME>/conf/[enginename]/[hostname]/context.xml.default 此<Context>元素适用于当前主机的所有Web
应用。如<CATALINA_HOME>/conf/Catalina/localhost/context.xml.default
③<CATALINA_HOME>/conf/[enginename]/[hostname]/[contextpath].xml 此<Context>元素适用于名为Catalina的
Engine下的localhost主机的指定的web应用,如<CATALINA_HOME>/conf/Catalina/localhost/helloapp.xml
④到Web应用的META-INF/context.xml查找,此<Context>元素适用于当前Web应用
⑤到<CATALINA_HOME>/conf/server.xml文件中的<Host>元素中查找<Context>子元素 此<Context>元素适用于单个Web应用
======配置Tomcat虚拟主机====
在Tomcat配置文件server.xml中,<Host>元素代表虚拟主机,在同一个<Engine>元素下可以配置多个虚拟主机
<Host name="www.mycompany.com" appBase="c:/mycompany" unpackWARs="true" autoDeploy="true">
<Alias>mycompany.com</Alias>//创建主机别名
<Alias>mycompany</Alias>//创建主机别名
</Host>
Host属性介绍
name:指定虚拟主机的名字
className:指定实现虚拟主机的Java类的名字,这个Java类必须实现org.apache.catalina.Host接口,该属性的默认值为
org.apache.catalina.core.StandardHost
appBase:指定虚拟主机的目录
autoDeploy:设为true表示热部署生效
deployOnStartup:设为true表示当Tomcat启动时会自动发布appBase目录下的所有web项目,如果web应用没有相应的<Context>元素,那么Tomcat会提供一个默认的Context组件。
unpackWARS:设为true表示把appBase属性指定的目录下的web应用的WAR文件先展开为开放目录结构后在运行。如果设为false,则直接运行WAR文件
workDir:指定虚拟主机工作目录,Tomcat在运行时会把与这个虚拟主机的所有web应用相关的临时文件放在此目录下,它的默认值为<CATALINA_HOME>/work。如果<Host>元素下的一个<Context>元素也设置了workDir属性,那么<Context>元素的workDir属性会覆盖<Host>元素的workDir属性
deployXML:如果设为false,那么Tomcat不会解析web应用中的用于设置Context元素的META-INF/context.xml文件。出于安全原因,如果不希望在web应用中包含Tomcat的配置元素,就可以把这个属性设置为false,在这种情况下,应该在<CATALIN_HOME>/conf/[enginename]/[hostname]下设置Context元素。该属性默认为true