Tomcat配置及原理
体系架构
图片来自 http://www.cnblogs.com/qq951785919/
核心组件
Server
Server:代表tomcat 实例,即表现出的一个java进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口;
Service
Service:用于实现将一个或多个connector组件关联至一个engine组件;
Connector
一个Connector将在某个指定端口上监听客户请求,并将获得的请求交给Engine来处理,从Engine处获得回应并返回客户端
示例:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
常用属性:
address:指定连接器监听的地址,默认为所有地址,即0.0.0.0; 可以自己指定
maxThreads:支持的最大并发连接数,默认为200;
port:监听的端口
protocol:连接器使用的协议,默认为HTTP/1.1,定义AJP协议时通常为AJP/1.3;
redirectPort:如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口;
connectionTimeout:等待客户端发送请求的超时时间,单位为毫秒,默认为60000,即1分钟;
enableLookups:是否通过request.getRemoteHost()进行DNS查询以获取客户端的主机名;默认为true; 进行反解的,可以设置为false
acceptCount:设置等待队列的最大长度;通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被放置于等待队列中;
Engine组件
Engine组件:Servlet实例,即servlet引擎,其内部可以一个或多个host组件来定义站点; 通常需要通过defaultHost来定义默认的虚拟主机;
示例:
<Engine name="Catalina" defaultHost="localhost">
...
</Engine>
常用属性
defaultHost:默认的虚拟主机
name:Engine组件的名称,用于日志和错误信息记录时区别不同的引擎;
Host组件
Host组件:位于engine内部用于接收请求并进行相应处理的主机或虚拟主机
示例:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
...
</Host>
常用属性
appBase:此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径;
autoDeploy:在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;
unpackWars:在启用此webapps时是否对WAR格式的归档文件先进行展开;默认为true
Context组件
Context组件:Context在某些意义上类似于路径别名
示例:
<Context path="/eshop" docBase="/e-shop/shopxx" reloadable="true"/>
#访问http://域名/eshop 真实路径/e-shop/shopxx
Valve组件
Valve组件:Valve类似于过滤器,用来拦截请求并在转至目标之前进行某种操作
Valve有许多类型这里常见的有2种
定义访问日志:org.apache.catalina.valves.AccessLogValve
定义访问控制:org.apache.catalina.valves.RemoteAddrValve
Tomcat常见的配置
[[email protected] tomcat]# tree /usr/local/tomcat/conf/ -L 1
/usr/local/tomcat/conf/
├── Catalina
├── catalina.policy ## 当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
├── catalina.properties ## Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
├── context.xml ## 每个webapp都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置;
├── jaspic-providers.xml ## 主要用于实现第三方JASPIC认证
├── jaspic-providers.xsd
├── logging.properties ## 日志相关配置设置
├── server.xml ## Tomcat的主配置文件,包含Service, Connector, Engine, Realm, Valve, Hosts主组件的相关配置信息
├── tomcat-users.xml ## Realm认证时用到的相关角色,用户和密码等信息,Tomcat自带的manager默认会用到此文件;在Tomcat中添加/删除用户,以及为用户指定角色都将通过编辑这个文件实现
├── tomcat-users.xsd
└── web.xml ## 每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认部署相关的配置;
Tomcat常见的命令
[[email protected] tomcat]# ls /usr/local/tomcat/bin
bootstrap.jar configtest.bat setclasspath.sh tomcat-native.tar.gz
catalina.bat configtest.sh shutdown.bat tool-wrapper.bat
catalina.sh daemon.sh shutdown.sh tool-wrapper.sh
catalina-tasks.xml digest.bat startup.bat version.bat
commons-daemon.jar digest.sh startup.sh version.sh
commons-daemon-native.tar.gz setclasspath.bat tomcat-juli.jar
/usr/local/tomcat/bin放置许多命令文件,这里bat结尾的是Window系统用的,比较常用的有 catalina.sh ,version.sh,shutdown.sh,startup.sh,值得注意的是catalina.sh几乎能调用/usr/local/tomcat/bin目录下所有脚本的功能
[[email protected] tomcat]# catalina.sh --help
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
debug Start Catalina in a debugger(debug模式启动)
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window(在前台运行tomcat)
run -security Start in the current window with security manager(加载配置文件catalina.policy中的安全策略并前台模式运行)
start Start Catalina in a separate window(后台运行tomcat)
start -security Start in a separate window with security manager(加载配置文件catalina.policy中的安全策略并后台模式运行)
stop Stop Catalina, waiting up to 5 seconds for the process to end(停止tomcat,默认等待5秒后停止进程)
stop n Stop Catalina, waiting up to n seconds for the process to end(停止tomcat,等待ns后停止进程)
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running(强制停止tomcat,如果5s后仍然运行则用kill命令杀死进程)
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running(强制停止tomcat,如果ns后仍然运行则用kill命令杀死进程)
configtest Run a basic syntax check on server.xml - check exit code for result (检查主配置文件语法是否有错误)
version What version of tomcat are you running?(查看tomcat版本)
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined