简介
tomcat是作为基本的web服务器被广泛使用,它和apache服务器略有不同,一般来讲apache服务器用于展示静态的文档信息,tomcat服务器用于动态jsp、servlet处理。目前大多数单一使用tomcat即可。现行版本多是tomcat 6.x。
安装和运行
下载tomcat免安装版,解压到指定目录(例如:d:/tomcat 6.x),进行环境变量CATALINA_HOME的设置。在%tomcat%/bin下含有startup.bat和shotdown.bat进行tomcat的启动和关闭。
tomcat的bin目录下同时会有catalina.bat文件,可指定start、run、debug、embedded、stop命令进行新窗口启动、当前窗口启动、调试模式启动、嵌入模式启动、关闭操作。
目录结构
- bin:存放windows或Linux平台上启动和关闭Tomcat的脚本文件
- conf:存放Tomcat服务器的各种全局配置文件,其中最重要的是server.xml和web.xml(注:如果需要配置用户名密码等,还需要配置tomcat-users.xml)
- doc:存放Tomcat文档
- logs:存放Tomcat执行时的日志文件
- src:存放Tomcat的源代码
- webapps:Tomcat的主要Web发布目录,默认情况下把Web应用文件放于此目录
- work:默认把web运行时生成的一些工作文件放在此目录当中例如:存放JSP编译后产生的class文件
- server:包含三个子目录:classes、lib和webapps(tomcat 5.x含有)
- server/lib:存放Tomcat服务器所需的各种JAR文件(tomcat 5.x含有)
- server/webapps:存放Tomcat自带的两个WEB应用admin应用和 manager应用(tomcat 5.x含有)
- common/lib:存放Tomcat服务器以及所有web应用都可以访问的jar文件(tomcat 5.x含有)
组成结构
tomcat本身由一系列配置文件组成,主要配置文件存在于%CATALINA_HOME%/conf/server.xml当中,结构如下:
<Server>
<Service>
<Connector />
<Engine>
<Host>
<Context>
</Context>
</Host>
</Engine>
</Service>
</Server>
由于有不少属性,故借鉴其他地方进行总结如下:
1.Server
说明:代表整个Servlet容器组件,是顶层元素。包含多个Service
参数–port:指定一个端口,这个端口负责监听关闭tomcat的请求
参数–shutdown:指定向端口发送的命令字符串,通常是“SHUTDOWN”
例如:
<Server port="8005" shutdown="SHUTDOWN"> ...... </Server>
2.Service
说明:包含一个,一个或多个元素
参数–name:指定service的名字,通常是”Catalina”
<Service name="Catalina"> ...... </Service>
3.Connector
说明:表示客户端和服务器实际交互的组件
参数–port:指定服务器端要创建的端口号,并使用这个断口监听来自客户端的请求
参数–protocol:指定协议
参数–connectionTimeout:指定超时的时间数(以毫秒为单位)
参数–redirectPort:指定当服务器正在处理HTTP请求时收到了一个SSL传输请求后重定向的端口号
以下参数不常使用:
参数–minProcessors(考察是否有此属性):服务器端启动时创建的处理请求的线程数
参数–maxProcessors(考察是否有此属性):最大可以创建的处理请求的线程数
参数–maxThreads:服务器创建的最大线程数
参数–minSpareThreads:最小剩余线程数
参数–maxSpareThreads:最大剩余线程数
参数–enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其IP地址
参数–acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过的请求将不予处理
参数–disableUploadTimeout:不明
参数–debug:不明
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
4.Engine
说明:只能含有一个,指定service中的请求处理主机,接收和处理来自Connector的请求
参数–name:指定Engine的名字,通常是”Catalina”
参数–defaultHost:指定默认的处理请求的主机名,至少与某个host元素的name属性值是相同的
<Engine name="Catalina" defaultHost="localhost"/>
5.Host
说明:表示一个虚拟主机,支持多个context
参数–name:指定虚拟主机名字
参数–debug:指定日志级别
参数–appBase:虚拟机应用的根目录。存放Web应用程序的基本目录,可以是绝对路径或相对于%CATALINA_HOME%的目录,默认是CATALINA_HOME/webapps
参数–autoDeploy:如果为true,表示Tomcat启动时会自动发布appBase目录下所有的Web应用(包括新加入的Web应用)
参数–unpackWARs:如果为true,则tomcat会自动将WAR文件解压后运行,否则不解压而直接从WAR文件中运行应用程序
参数–deployOnStarup:如果此项为true,表示Tomcat服务器启动时会自动发布appBase目录下所有Web应用。如果Web应用在server.xml中没有相应的元素,则将采用默认的Context配置。deployOnStarup的默认设置是true
参数–alias:指定虚拟主机的别名,可以指定多个别名
参数–xmlValidation:不明
参数–xmlNamespaceAware:不明
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"/>
6.Context
说明:表示一个web应用程序
参数–docBase:指定此Web应用的绝对或相对路径,也可以为WAR文件的路径
参数–path:表示此Web应用程序的url的入口
参数–reloadable:如果为true,则Tomcat在运行时会自动监视Web应用的/WEB-INF/lib和 /WEB-INF/classes下文件的改动,自动装载新应用,使我们可以在不重启Tomcat的情况下更新Web应用
<Context docBase="D:\apache-tomcat-7.0.62\webapps\Hello" path="/Hello" reloadable="true"/>
注:每个还有其他的节点和属性,例如Listener,每个节点下还有其他的参数,可自行查找。
以下对tomcat 7.x中的配置进行了说明:
<?xml version="1.0" encoding="UTF-8"?>
<!--主要节点,唯一 -->
<Server port="8005" shutdown="SHUTDOWN">
<!--Listener节点,可有多个-->
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<!--全局资源节点 -->
<GlobalNamingResources>
<Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase"/>
</GlobalNamingResources>
<!--含有多个connector -->
<Service name="Catalina">
<!--端口设置从这里设置 -->
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<!--唯一,接受和处理请求-->
<Engine defaultHost="localhost" name="Catalina">
<!--对域进行的权限控制 -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
<!--项目直接放在webapps目录就是因为配置此节点,可以配置多个节点,例如:本地的http:localhost:8080就是这里的host -->
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<!--配置web应用,一般不推荐此处配置 -->
<Context docBase="D:\apache-tomcat-7.0.62\webapps\Hello" path="/Hello" reloadable="true"/>
</Host>
</Engine>
</Service>
</Server>
部署web应用
tomcat部署web应用方法很多,可以百度到不少,但是感觉没有说基本的,都是按照其他方式划分,比如动态部署,静态部署,容易让人配置,却不知道由来。以下进行总结。
tomcat部署web时会采用以下5种方式,依次尝试查找web应用的Context元素,按顺序进行查找:
1.说明:就是静态部署,不推荐
位置:%CATALINA_HOME%/conf/context.xml
范围:所有的web应用
2.说明:默认全局配置,对应engine下的hostname
位置:%CATALINA_HOME%/conf/[enginename]/[hostname]/context.xml.default
范围:所有的web应用
3.说明:单个web配置,推荐
位置: %CATALINA_HOME%/conf/[enginename]/[hostname]/[contextpath].xml
范围:适用单个web配置
4.说明:单个配置,推荐
位置:web应用的META-INF/context.xml
范围:当前web应用
5.说明:就是静态部署,不推荐
位置:%CATALINA_HOME%/conf/server.xml
范围:单个web应用
其他的静态部署、动态部署多是基于此进行部署的,可以进行查找。当使用eclipse时,配置好tomcat可以自动配置context文件的,默认采用了第三种方式,可以进行查看。