文章目录
- tomcat文件目录
- bin
- conf
- lib
- logs
- temp
- webapps
- work
- 页面
- 架构组件详解
- tomcat运行方式
- 组件介绍
- tomcat管理
tomcat文件目录
➜ apache-tomcat-7.0.86 ls
LICENSE RUNNING.txt lib webapps
NOTICE bin logs work
RELEASE-NOTES conf temp
bin
➜ apache-tomcat-7.0.86 cd bin
➜ bin ls
bootstrap.jar setclasspath.bat
catalina-tasks.xml setclasspath.sh
catalina.bat shutdown.bat
catalina.sh shutdown.sh
commons-daemon-native.tar.gz startup.bat
commons-daemon.jar startup.sh
configtest.bat tomcat-juli.jar
configtest.sh tomcat-native.tar.gz
daemon.sh tool-wrapper.bat
digest.bat tool-wrapper.sh
digest.sh version.bat
hs_err_pid1381.log version.sh
logs
bin目录下是脚本有的是shell脚本(类unix系统),有的是bat脚本(windows系统批处理)。
还有一些用于提高tomcat启动速度和js页面第一次的相应速度的jar文件,即commonts-daemon.jar bootstrap.jar
start.sh 启动服务
shutdown.sh 关闭服务
version.sh 查看版本号
这些所有的脚本可以通过catalina.sh 一些参数调用其他脚本执行
➜ bin ./catalina.sh --help
Using CATALINA_BASE: /Users/leesin/for mac 安装包/apache-tomcat-7.0.86
Using CATALINA_HOME: /Users/leesin/for mac 安装包/apache-tomcat-7.0.86
Using CATALINA_TMPDIR: /Users/leesin/for mac 安装包/apache-tomcat-7.0.86/temp
Using JRE_HOME: /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
Using CLASSPATH: /Users/leesin/for mac 安装包/apache-tomcat-7.0.86/bin/bootstrap.jar:/Users/leesin/for mac 安装包/apache-tomcat-7.0.86/bin/tomcat-juli.jar
Usage: catalina.sh ( commands ... )
commands:
debug Start Catalina in a debugger
debug -security Debug Catalina with a security manager
jpda start Start Catalina under JPDA debugger
run Start Catalina in the current window
run -security Start in the current window with security manager
//启动
start Start Catalina in a separate window
start -security Start in a separate window with security manager
//关闭
stop Stop Catalina, waiting up to 5 seconds for the process to end
stop n Stop Catalina, waiting up to n seconds for the process to end
stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running
stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running
//配置文件语法错误检查
configtest Run a basic syntax check on server.xml - check exit code for result
//版本号
version What version of tomcat are you running?
Note: Waiting for the process to end and use of the -force option require that $CATALINA_PID is defined
然而启动catlina.sh的时候依赖一些环境变量,从上面的输出可以看到
//默认如下
Using CATALINA_BASE: /Users/leesin/for mac 安装包/apache-tomcat-7.0.86
Using CATALINA_HOME: /Users/leesin/for mac 安装包/apache-tomcat-7.0.86
Using CATALINA_TMPDIR: /Users/leesin/for mac 安装包/apache-tomcat-7.0.86/temp
配置环境变量
vim /etc/profile.d/tomcat.sh
//输入
export CATALINA_HOME= /Users/leesin/for mac 安装包/apache-tomcat-7.0.86
export PATH=$CATALINA_HOME/bin:$PATH
//source这个文件
. /etc/profile.d/tomact.sh
//就可以再其他的目录执行catalina.sh了
cd ../../
//查看版本
catalina.sh version
//检查配置文件语法是否有问题
catalina.sh configtest
cd tomcat
//tomcat自带一个web服务,
ss-tnlp
tomcat其实就是一个java进程在jvm中运行
➜ bin jps
45985 Bootstrap
45992 Jps
Bootstrap进程就是bootstrap.jar,tomcat自身web程序为了实现加速有一个bootstrap.jar
conf
➜ apache-tomcat-7.0.86 cd conf
➜ conf ls
Catalina catalina.properties logging.properties tomcat-users.xml
catalina.policy context.xml server.xml web.xml
conf是配置文件目录,核心配置文件是server.xml
httpd能够实现基本用户认证,tomcat也支持必须提供账号密码即这里的tomcat-user.xml
web.xml是用来部署站点时部署的描述符
lib
➜ apache-tomcat-7.0.86 cd lib
➜ lib ls
annotations-api.jar jasper-el.jar tomcat-i18n-es.jar
catalina-ant.jar jasper.jar tomcat-i18n-fr.jar
catalina-ha.jar jsp-api.jar tomcat-i18n-ja.jar
catalina-tribes.jar servlet-api.jar tomcat-jdbc.jar
catalina.jar tomcat-api.jar tomcat-util.jar
ecj-4.4.2.jar tomcat-coyote.jar tomcat7-websocket.jar
el-api.jar tomcat-dbcp.jar websocket-api.jar
➜ lib
lib目录是存放库文件的,tomcat各组件之间共享的类库,一般依赖tomcat的所有外部应用程序,都有可能访问这个目录的任意的jar文档,也可以向这个目录中添加新的包含类库的文档,提供额外的类库
logs
➜ apache-tomcat-7.0.86 cd logs
➜ logs ls
catalina.2018-10-19.log host-manager.2018-12-05.log localhost.2019-03-25.log localhost_access_log.2019-03-29.txt
catalina.2018-11-13.log host-manager.2018-12-10.log localhost.2019-03-28.log manager.2018-10-19.log
catalina.2018-12-05.log host-manager.2019-03-25.log localhost.2019-03-29.log manager.2018-11-13.log
catalina.2018-12-10.log host-manager.2019-03-28.log localhost_access_log.2018-10-19.txt manager.2018-12-05.log
catalina.2019-03-25.log host-manager.2019-03-29.log localhost_access_log.2018-11-13.txt manager.2018-12-10.log
catalina.2019-03-28.log localhost.2018-10-19.log localhost_access_log.2018-12-05.txt manager.2019-03-25.log
catalina.2019-03-29.log localhost.2018-11-13.log localhost_access_log.2018-12-10.txt manager.2019-03-28.log
host-manager.2018-10-19.log localhost.2018-12-05.log localhost_access_log.2019-03-25.txt manager.2019-03-29.log
host-manager.2018-11-13.log localhost.2018-12-10.log localhost_access_log.2019-03-28.txt
logs目录日志目录
temp
➜ apache-tomcat-7.0.86 cd temp
➜ temp ls
safeToDelete.tmp
➜ temp
temp 历史文件
将来运行jsp时候,先转换成servlet,然后编译成servlet源代码,所以编译后的文件在temp文件下
webapps
➜ apache-tomcat-7.0.86 cd webapps
➜ webapps ls
ROOT docs manager examples host-manager
真正的网页文件,web应用程序在webapps中
docs manager examples host-manager 是用户自带的
root是部署页面文件的时候需要的
work
➜ apache-tomcat-7.0.86 cd work
➜ work ls
Catalina
➜ work
work tomcat工作目录,jsp编译的类文件都是放在这里的。
编译的中间过程是在temp下,编译的结果即.class文件在work目录下
页面
Server status 查看服务器状态
Manager app 管理应用程序
Host Manager 管理虚拟主机
点击任意一个按钮会提示输入用户名密码,此时没有设置,点击取消,此时会跳转到401界面,Unauthorized,提示没有授权
架构组件详解
配置文件
<server>
<service>
<connector />
<engine>
<host>
<context>
</context>
</host>
<host>
<context>
</context>
</host>
</engine>
</service>
</server>
这些组件都是tomcat自己的类组成的,可以通过配置参数来设置类的工作属性
顶级组件:位于整个配置的外层:server service
容器类组件:可以包含其他组件的组件:service
连接器组件:连接用户请求至tomcat:connector
被嵌套的组件:位于一个容器中,不能包含其他组件:
容器类:
- egine:核心容器 提供jsp、servlet解析、转换、编译并向外提供服务的核心组件,叫做catalina引擎,负责通过connector接受用户请求,分析请求并处理请求,engine里面有虚拟主机,通过请求判断是哪个虚拟主机,并转至对应的虚拟主机,egine是最高级别的容器类组件,
- host:类似于httpd中的虚拟主机:支持基于FQDN的虚拟主机
- context:最内层的容器类组件,一个context代表一个web应用程序,配置context的主要目的,是指定对应的webapp根目录,还能为webapp指定额外的属性,如部署方式等。定义一个应用程序什么时候部署、部署之后的访问路径
部署:是使用类加载器,为webapp准备好其依赖的所有类
服务:
- service:将连接器关联至引擎,因此 一个service内部可以有多个connector,但只能有一个engine
一个server能够出现多个service
顶级组件:
- server:表示一个运行与JVM中的tomcat实例,一个tomcat对应一个
嵌套类组件:
-
valve(阀门):拦截请求并在将其转至对应的webapp之前进行某种处理操作,比如监控日志、基于ip做访问控制,可以用于任何容器中
access log value :
remote adress filter value:基于ip做访问控制 -
loger:日志记录器,用于记录组件内部状态信息,可用于除context之外的任何容器中
-
realm:可以用于任何容器类的组件中,关联一个用户认证库,实现认证和授权:
UserDatavaseRealm:通过jndi自定义的数据库实现认证库
MemoryRealm:tomcat-user.xml中
JDBCRealm:基于jdbc连接至数据库中查找用户
其他组件:
Listener:用来监听的
tomcat运行方式
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
port:端口
protocol:协议
connectionTimeout:超时时间
redirectPort:当用户用http请求某个资源,而该资源本身又被设置了必须要https方式访问,此时Tomcat会自动重定向到这个redirectPort设置的https端口。
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
AJP/1.3 协议 , 用于监听其他服务器转发过来的请求.
二进制协议,使用httpd反向代理用户请求至tomcat时,在httpd和tomcat之间使用。
摘一个博客的一段话
The AJP Connector element represents a Connector component that communicates with a web connector via the AJP protocol.
AJP连接器可以通过AJP协议和一个web容器进行交互
This is used for cases where you wish to invisibly integrate Tomcat into an existing (or new)Apache installation, and you want Apache to handle the static content contained in the web application, and/or utilize Apache’s SSL processing.
当你想让Apache和Tomcat结合并且你想让Apache处理静态内容的时候用AJP,或者你想利用Apache的SSL处理能力时
This connector supports load balancing when used in conjunction with the jvmRoute attribute of the Engine.
特殊于HTTP Connector,AJP还可以与engine元素上的jvmRoute结合使用来实现负载均衡功能
我看的tomcat8.0.30的版本的AJP连接器支持JK 1.2.X和mode_proxy(on Apache httpd 2.x)两种方式与其他web容器交互(一般使用Apache HTTP Server)
原文:https://blog.csdn.net/u010297957/article/details/50782212
通过服务的方式启动脚本
//必须在这个目录下,添加服务
vim /etc/init.d/tomcat
#!Abin/sh
# Tomcat initscript for Linux.
#
# chkconfig: 23459614
# description: The Apache Tomcatservlet/JSPcontai ner.
# JAVA_OPTS= '-Xms64m -Xmx128m'
JAVA_HOME=/usr/java/latest//最近的版本
CATALINA_HONE=usr/loocal/tomcat
export JAVA_HOME CATALINA_HOME
case $1 in
start)
exec $CATALINA_HOME/bin/catalina.sh start
stop)
exec $CATALINA_HOME/binlcatalina.sh stop
restart)
//shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。
//这里原来写的exec $CATALINA_HOME/bincatalina.sh stop是错误的,执行完这句话就退出了,
//这样下面的sleep和start就不执行了,
//通过/xxx/xxx.sh 的方式
$CATALINA_HOME/bincatalina.sh stop
sleep2
exec $CATAINA_HOME/bincatalina.sh start
*)
echo "Usage:'basename $0 '{start|stop|restart}
exit 1
esac
注意上面的注释:
// shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。
//这里原来写的exec $CATALINA_HOME/bincatalina.sh stop是错误的,执行完这句话就退出了,
//这样下面的sleep和start就不执行了,
//通过/xxx/xxx.sh 的方式
chmod +x /etc/init.d/tomcat
//检查脚本语法是否有错误
bash -n /etc/init.d/tomcat
//添加服务(任意目录)
chkconfig --add tomcat
//检测服务是否成功(任意目录)
service tomcat start
//查看端口是否监听
ss -tnlp
//如果没有tomcat端口
//-x 是调试用的,加了这个,就会把脚本中的每条命令的执行情况打印出来
bash -x /etc/init.d/tomcat restart
//发现connection refused,没有有启动,或者其他的原因
组件介绍
下面简单介绍几个常用组件:
- Server组件
如上面示例文件中定义的
<Server port-8005 shutdown-"SHUTDOWN">
下面简单介绍几个常用组件:
- Server组件
如上面示例文件中定义的
Server port=”8885” shutdown=” SHUTDOWN">
这会让 Tomcat6启动一个 server实例(即一个JW),它监听在8885端口以接收 shutdown命令。各 Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个 Server实例,必须配置它们使用不同的端口。这个端口的定义用于为管理员提供一个关闭此实例的便捷径,因此,管理员可以直接 telnet至此端口使用 SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行
telnet localhost:8005
...
输入:shutdown
ss -tnlp
//发现8080端口没有了,但是8005这个监听服务的端口还是存在的。
只能shutdown不能start,因为比较危险,所以只能监听本地地址,因为可以直接本地关闭tomcat
Server的相关属性:
c1 assName:用于实现此 Server容器的完全限定类的名称,默认为org, apache.cata1ina,core. Standardserver
pont:接收 shutdown指令的端口,默认仅允许通过本机访问,默认为8885;
shutdown:发往此 Server用于实现关闭 tomcat实例的命令字符丰,默认为 SHUTDOWN
-
service组件
Service主要用于关联一个引擎和与此引擎相关的连接器,每个连接器通过一个特定的端口和协议接收入站请求交将其转发至关联的引擎进行处理。困此, Service要包含
个或多个连接器
如上面示例中的定义
这定义了一个名为Cata1ina的 Service,此名字也会在产生相关的日志信息时记录在日志文件当中
Service相关的属性:
c1 assName:用于实现 servicel的类名,一般都是org. apache, catalina,core. Standardseryice
name:此服务的名称,默认为Catalina; -
Connector组件
进入 Tomcat的请求可以根据 Tomcat的工作模式分为如下两类:
Tomcat作为应用程序服务器:请求来自于前端的web服务器,这可能是 Apache,Is, Nginx等;
Tomcat作为独立服务器:请求来自于web浏览器
Tomcat应该考虑工作情形并为相应情形下的请求分别定义好需要的连接器才能正确接收来自于客户端的请求。一个引擎可以有一个或多个连接器,以适应多种请求方式
定义连接器可以使用多种属性,有些属性也只适用于某特定的连接器类型。一般说来,常见于 server.xm1中的连接器类型通常有4种
1)HTTP 连接器
2)SsL 连接器
3)A]P1.3 连接器
4) proxy 连接器
如上面示例 server,xm1 中定义的 HTTP 连接器
<Connector
port=“8688”protocol="HTTP/1.1
maxThreads="150" connectionTimeout="20000
redirectPort-"8443/>
定义连接器时可以配置的属性非常多,但通常定义 HTP 连
接器时必须定义的属性只有“port”,定义 A]P 连接器时
必须定义的属性只有"protocol",因为默认的协议为
HTTP。
以下为常用属性的说明
-
address:指定连接器监听的地址,默认为所有地址,即
8.0.0.0 -
maxThreads:支持的最大并发连接数,默认为 209(很重要)
-
port:监听的端口,默认为 θ
-
protocol:连接器使用的协议,默认为 HTTP/1.1,定
义 A]P 协议时通常为 A]P/1.3 -
redirectOr:如果某逹接器支持的协议是 HTTP,当接
收客户端发来的 Https 请求时,则转发至此属性定义的
端口 -
connectionTimeout:等待客户端发送请求的超时时间,单位
为毫秒,默认为 699,即 1 分钟; -
enableLookups:是否通过 request, getRemoteHost()
进行 DNS 查询以获取客户端的主机名;默认为 true; 影响效率的话可以 enableLookups = “false” -
acceptcount:设置等待队列的最大长度;通常在
tomcat 所有处理线程均处于繁忙状态时,新发来的请求将
被放置于等待队列中;当上面的maxThreads不够用的时候,就会走到等待队列中
下面是一个定义了多个属性的 SSL 连接器
<Connector port="8443
//minSpareThreads最小空闲进程数,maxSpareThreads最大空闲线程数
maxThreads=150" minSpareThreads="25" maxSpareThreads="75
//debug=0,不启用调试功能,scheme协议是https secure secure:在SSL连接器可将其设置为true,默认为false
enablelookups="false" acceptcount="100" debug="0“ scheme="https" secure= "true"
//clientAuth clientAuth指定是否需要验证客户端证书,如果该设置为“false”,则为单向SSL验证,SSL配置可到此结束。如果clientAuth设置为“true”,表示强制双向SSL验证
//sslProtocol使用TLS协议
clientAuth="false" sslProtocol="TLS"/>
更加详细的
摘自一个不错的博文 :https://www.cnblogs.com/756623607-zhang/p/6654403.html
Attributes(通用属性):
1.allowTrace 是否激活TRACE HTTP method,boolean值 ,默认false
2.asyncTimeout 指定异步请求超时时间,单位ms,默认30000ms(30秒)
3.enableLookups 如果设置true,request.getRemoteHost() 将通过执行 DNS lookups(DNS查找)返回远程客户端实际的主机名称,如果设置false,将跳过DNS查找。默认false
4.maxHeaderCount 指定一个请求的最大请求头数量,如果超过该请求头数量的请求将被拒绝,设置<0,意味不做限制。默认100
5.maxParameterCount 指定请求参数值对的最大数量(get加Post),在这个数量内的参数,能够自动被容器解析。超过的将被忽略,该值<0意味不做限制,默认10000.注意: Fail6edRequestFilter能够用来拒绝请求,可以用来打破该限制
6.maxPostSize 指定能够被容器FORM URL parameter解析的最大字节数量。如果设置<=0将不做限制,默认2097152 (2 megabytes)
7.maxSavePostSize 指定 FORM or CLIENT-CERT authentication期间,容器缓存POST请求的最大子节数。设置-1表示不做限制,0表示不缓存,默认4096 (4 kilobytes)
8.parseBodyMethods 一个逗号分隔的HTTP方法列表,该列表中的请求体的参数将被解析, 默认POST
9.port Connector将在该端口创建一个server socket并等待连接。操作系统只允许一个server应用在一个指定ip地址下监听一个端口。如果设置为0,Tomcat将随机为gaiConnect组件分配一个空闲port。
10.protocol 设置处理请求的协议,默认是HTTP/1.1 ,该协议将使用一个自动切换机制来选择是用一个非阻塞的java NIO的连接器,还是用一个APR /本地连接器。主要是根据PATH (Windows) or LD_LIBRARY_PATH (on most unix systems)环境变量中是否包含Tomact本地库,如果包含将采用后者,否则前者。对于APR /本地连接器对于HTTPS的设置将有别于非阻塞的java NIO的连接器。
To use an explicit protocol rather than rely on the auto-switching mechanism described above, the following values may be used:
org.apache.coyote.http11.Http11Protocol - blocking Java connector
org.apache.coyote.http11.Http11NioProtocol - non blocking Java NIO connector
org.apache.coyote.http11.Http11Nio2Protocol - non blocking Java NIO2 connector
org.apache.coyote.http11.Http11AprProtocol - the APR/native connector.
11.proxyName Connector组件正在使用代理配置,表示request.getServerName()的返回值
12.proxyPort Connector组件正在使用代理配置,表示request.getServerPort()的返回值
13.redirectPort 如果此连接器支持非SSL请求,并接收到一个请求,一个匹配的<<安全约束>要求SSL传输,卡特琳娜自动将请求重定向到指定的端口号。
14.scheme request.getScheme()的返回值,默认http,如果你希望是https可以修改成https
15.secure 设置request.isSecure()的返回值,默认false
16.URIEncoding 指定在解码URL后,用于解码URI字节的字符编码,默认 UTF-8 。但是在system property中设置org.apache.catalina.STRICT_SERVLET_COMPLIANCE 参数为true,那么ISO-8859-1将被使用
17.useBodyEncodingForURI 该参数用于指定是否用contentType中指定的编码用于URI查询参数,而不用上面的URIEncoding编码。默认false。注意该参数只正对请求的查询参数有用,并不影响path部分。如果各种其它编码设置都都指定,默认编码都是ISO-8859-1
18.useIPVHosts 将此属性设置为true,将导致Tomcat使用接收请求的IP地址,来确定将请求发送到哪个Host主机。默认false
19.xpoweredBy Set this attribute to true to cause Tomcat to advertise support for the Servlet specification using the header recommended in the specification。默认false。
- Engine 组件
Engine 是 Servlet 处理器的一个实例,即 servlet 引擎,默认为定义在 server.xml 中的catalina。 Engine 需要 defaultHost 属性来为其定义一个接收所有发往非明确定义虚拟主机的请求的 host 组件。
如前面示例中定义的:
<Engine name="Catalina" defaultHost="localhost">
常用的属性定义:
defaultHost: Tomcat 支持基于 FQDN 的虚拟主机,这些虚拟主机可以通过在 Engine 容器中定义多个不同的 Host组件来实现;但如果此引擎的连接器收到一个发往非非明确义虚拟主机的请求时则需要将此请求发往一个默认的虚拟主机进行处理,因此,在 Engine 中定义的多个虚拟主机的主机名称中至少要有一个跟 defaut tHost 定义的主机名称同名:
name: Engine 组件的名称,用于日志和错误信息记录时区别不同的引擎
Engine 容器中可以包含 Realm、Host, Listener 和 vave子容器
- Host 组件
位于 Engine 容器中用于接收请求并进行相应处理的主机
或虚拟主机,如前面示例中的定义:
<Host name="localhost" appBase="webapps
//unpackWARs自动解压war文件,
unpackWARs="true" autoDeploy="true
//xmlValidation是否开启xml的校验功能,xmINamespaceAware对名称空间做一些检测
xmlValidation="false" xmINamespaceAware="false">
//可以再host中定义Valve
//这个classname说明是日志 directory目录在 logs
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
//prefix 是日志名前缀, suffix日志名后缀
prefix="localhost_access_log." suffix=".txt"
//日志格式
pattern="%h %l %u %t "%r" %s %b" />
</Host>
常用属性说明
1) appBase: 此 Host 的 webapps 目录,即存放非归档的 web 应用程序的目录或归档后的 wAR 文件的目录路径;可以使用基于$ ATALINA_HOME 的相对路径;
2) autoDeploy:在 Tomcat 处于运行状态时放置于appEase 目录中的应用程序文件是否曰动进行 deploy;默认为 true
3) unpackwars:在启用此 webapps 时是否对 WAR 格式的归档文件先进行展开;馱认为 true
虚拟主机定义示例:
<Engine name="Catalina
defaultHost="localhost">
<Host name="localhost" appBase="webapps>"
<Context path="" docBase="ROOT"/>
<Context path="/bbs docBase="/web/bss"
reloadable="true" crosscontom" appBase-"/web/mail">
</Host>
<Host>
<Context path="" docBase="ROOT"/>
</Host>
</Engin>
主机别名定义:
如果一个主机有两个或两个以上的主机名,额外的名称均可以以
别名的形式进行定义,如下:
<hosTname="wwww.magedu.comappbase=webapps" unpackwars="true">
<Alias>magedu.com</Alias>
</Host>
- Context 组件
Context 在某些意义上类似于 apache 中的路径别名,一个 Context 定义用于标识 tomcat 实例中的一个 web 应用程序;如下面的定义:
<!-- Tomcat Root Context-->
//path url路径,root别名 docBase,路径别名映射到docBase上去
<Context path="" docBase="/web/webapps"/>
<!-- buzzin webapp-->
<Context path="/bbs"
docBasel="/web/threads/bbs"
reloadable="true"
</Context>
<!-- chat seryer-->
<Context path="/chat" docBase"/web/chat"/>
<!-- darian web-->
< Context path=”/darian" docBase+"dar1an”/>
<Host name-"www.a.com" appBase="/www/webapps">
//这里的root可以是/www/webapps,也可以是/www/webapps目录下的一个子目录,如下就是/www/webapps/Root
//reload开发过程中,保存,文件Tomcat 根据classes改变 重新加载。
<Context path="" doBase="Root" reload="true">
//path是跟在to port后面的东西
<Context path="/test" doBase="testapp" reload="true">
</Host>
cd /www/webapps
ls --> index.jsp
mkdir ROOT
mv index.jsp ROOT
cp ROOT/index.jsp testapp/index.jsp
//修改两个index.jsp的内容以便于区分
访问:http://www.a.com/index.jsp ,就会跳转到index.jsp
访问:http://www.a.com/test/index.jsp,就会跳转到test对应的index.jsp
访问:http://172.16.xx.xx 又会跳转到默认的tomcat页面,因为engin中的defaultHost=“localhost”
在tomcat6中,每一个context定义也可以使用一个单独的xml文件进行,其文件的目录为$ SCATALINA_HOME/conf// ,可以用于context中的xml元素有loader,manager,realm,resources和watchResources。
试试能不能真正部署一个应用程序进来
cd /www/webapps
cd ROOT/
//找到一个解压好的应用程序,将WebRoot目录下的所有文件拷贝到/www/webapps/root下
cp WebRoot/* /www/webapps/root
ls
css ROOT WEB-INF index.jsp
tomcat管理
tomcat自带两个管理类的app
- server status:
获取状态信息
部署应用程序 - host manager
管理虚拟主机
如图,先点击server status之后,需要登录,点击取消
[root@supervisordruid1 conf]# vi tomcat-users.xml
//修改如下 role是角色,users里面的roles如果有多个角色用逗号分隔
<tomcat-users>
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
</tomcat-users>
//重启tomcat
./catalina.sh run
再次做如上的页面操作,输入用户名密码
list application 显示有几个app(通过首页的manager App 也能进入到这个页面)
再往下,可以 在线部署应用程序
部署的作用:使用类加载器,为webapp准备好其依赖的所有类
点击server status 可以查看jvm的使用情况,连接情况(ajp、http)
stage,正在提供服务的
time,连接的时间
B send 传送字节数
B recv 接受字节数
Client 客户端地址
VHost 虚拟主机
Request url
点击首页的host Manager 虚拟主机管理,会提示需要用户名密码验证,点击取消,提示配置
[root@supervisordruid1 conf]# vi tomcat-users.xml
//修改如下 role是角色,users里面的roles如果有多个角色用逗号分隔
<tomcat-users>
<role rolename="manager-gui"/>
//增加
<role rolename="admin-gui"/>
//这里可以使用多个用户,也可以使用一个用户,但是要加入roles admin-gui
<user username="tomcat" password="tomcat" roles="tomcat,manager-gui,admin-gui"/>
</tomcat-users>
//重启tomcat
./catalina.sh run
再次刷新页面
上图中的host name 本来应该包括上面配置的www.a.com 可以对自己加入的host在后面的Commads 进行停止和删除
还可以在添加新的虚拟主机
name 名字 www.b.com(举例子)
aliases 别名
APP base 路径(前提是要有这个路径)
autoplay 自动部署
…
点击add,就添加进去了
但是注意此时tomcat的server.xml中并没有加入这个host
修改配置文件为什么没有生效呢?
server.xml tomcat-user.xml 配置文件在启动的时候都被读进内存中,所以刚才页面中的配置也只在内存中生效。
重启tomcat,再次刷新页面,页面中刚刚部署的host( www.b.com)还是存在的,只有jvm停止的时候,才会消失,所以不用担心tomcat重启配置的host会丢失,只不过没有写在配合文件中