前文咱们聊到了java相关重要组件和它们之间的关系以及jdk、tomcat部署回顾请参考http://www.javashuo.com/article/p-tmlblnso-mv.html;今天咱们来聊一聊tomcat的配置使用相关话题;php
1、tomcat配置相关文件简介html
一、server.xmljava
server.xml的配置文件格式大体以下web
<Server> <Service> <connector/> <connector/> ... <Engine> <Host> <Context/> <Context/> ... </Host> <Host> ... </Host> ... </Engine> </Service> </Server>
提示:server.xml是tomcat的主配置文件,主要定义server属性相关参数,而server中核心的组件有service(服务)、connector(链接器)、engine(引擎)、host(虚拟主机)、context(上下文);这些组件它们都有必定联系,其中一个service中能够包含一个或多个链接器(connector),其次就是引擎(engine),引擎是tomcat运行jsp代码的核心组件,一般状况一个链接器只能对应一个引擎,而一个引擎能够对应多个链接器,能够包含多个host,host咱们能够理解为httpd中的基于名称的虚拟主机;一个host中能够一个或多个context;context的主要做用是定义location与文件系统路径的对应关系和访问权限相关配置;apache
对于tomcat配置文件server.xml中的组件,其实都是Java的类实现,这些组件大致可分为以下类型:windows
顶级组件:Server浏览器
服务类组件:Servicetomcat
链接器组件:http, https, ajp(apache jserv protocol)安全
容器类:Engine, Host, Contextbash
被嵌套类:valve, logger, realm, loader, manager, ...
集群类组件:listener, cluster, ...
二、web.xml:每一个webapp只有部署后才能被访问,它的部署方式一般由web.xml进行定义,其存放位置为WEB-INF/目录中;一般状况每一个webapp项目中都会有WEB-INF或META-INF目录,该目录就是用于存放该项目部署相关配置(web.xml或者context.xml),若是对应项目里没有这个目录,那么tomcat中的web.xml就提供默认部署相关配置;
三、context.xml:webapp的专用配置文件,其存放位置为WEB-INF/目录中;该文件和web.xml文件相似,若是对应webapp项目中没有WEB-INF或META-INF目录,那么tomcat中的content.xml就是为其提供默认配置;
四、tomcat-users.xml:用户认证的帐号和密码文件;
五、catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
六、catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
七、logging.properties:日志系统相关的配置;
2、webapp的组织结构
/:webapps的根目录
index.jsp:主页脚本,相似fpm中的index.php;
WEB-INF/:当前webapp的私有资源路径;一般用于存储当前webapp的web.xml和context.xml配置文件;所谓私有资源路径就是在对应url上没法进行访问的资源(不能以uri的方式被其余人访问到);
META-INF/:此目录做用相似WEB-INF/;
class/:存储当前webapp所提供的类文件;
lib/:存储类文件目录,当前webapp所提供的类被打包成jar格式的类文件;
webapp归档格式:
.war这类文件是webapp的归档文件,里面包含了整个webapp的全部文件,类,咱们能够理解.war格式的文件就是整个webapp全部文件的压缩归档文件,一般咱们直接把该文件放在webapps目录下而后启动tomcat,这个包会自动展开;一般.war包用于部署单元来使用;
.jar这类文件一般是把类和类相关的资源封装压缩在一块儿的归档文件;一般用于部署和封装库、组件和插件程序;
.rar这类文件主要是资源适配器类打包文件的格式;
.ear这类文件是企业级webapp打包文件,和.war不一样的是,ear是针对EJB容器,.war针对web容器;ear包含war;
3、部署webapp的相关术语:
一、deploy(部署):所谓部署就是把webapp的源文件放置于目标目录(网页程序文件存放目录,相似httpd中的documentroot指定的目录),而后配置tomcat服务器可以基于web.xml和context.xml文件中定义的路径来访问webapp;而后将其特有的类和依赖的类经过类加载器(class loader)装载至jvm的这一过程;部署第方式有两种,一种是自动部署(auto deploy),自动部署就是咱们直接把webapp文件放置对应目录下就能够实现访问,不须要人为手动的去配置部署;另一种就是手动部署,手动部署又能够分为冷部署和热部署;所谓冷部署就是把webapp源码文件放到指定位置,而后启动tomcat这种方式叫冷部署;热部署指的是在不中止tomcat的前提下进行部署的方式;经常使用的部署工具备:manager、ant脚本和tcd(tomcat client deployer)等;
二、undeploy(反部署):所谓反部署就是部署的逆向操做,中止webapp并从tomcat实例上卸载webapp的操做叫反部署;
三、start:启动处于中止状态的webapp;
四、stop:中止webapp,使其再也不像客户提供服务,可是类依然在jvm上;
五、redeploy:从新部署;
示例:手动提供一测试类应用,并冷部署到tomcat上
一、建立目录结构
提示:在webapps目录下建立项目目录;这里说一下webapps目录,这个目录默认配置是支持热部署的,其中ROOT目录是主站点源码文件存放地,存放在ROOT目录下的文件在访问时能够不用加任何uri就能够访问获得,其余目录须要加对应目录名为uri才能够被访问;
二、建立index.jsp文件
提示:index.jsp文件中就作了一件事,打印hello world这句话;
三、更改目录权限
提示:新建的文件咱们须要保证tomcat用户有能够正常的读取便可,对于目录tomcat用户能够进入便可;
四、启动tomcat
提示:默认状况tomcat所在webapps目录下的子目录是能够经过访问对应目录名称访问到的,咱们把网页脚本文件放到webapps目录下的子目录下,不停tomcat也是能够访问到,缘由是tomcat默认就支持热部署;以下配置文件所示
验证:用浏览器访问咱们刚才部署testwebapp,看看是否可以被访问到?
提示:能够看到咱们访问对应子目录的名称是能够正常访问到对应目录下的index.jsp文件;
4、利用tomcat的两个管理应用来部署webapp
一、给manager应用配置帐号
提示:tomcat-user.xml这个配置文件主要是定义用户相关配置;以上配置表示启动manager-gui角色,并添加tomcat用户拥有manager-gui角色的全部权限;这须要注意一点username password roles 这几个变量之间是用空格作分割的,不要忘记每一个变量赋值后,用空格分割,最后一个不须要有空格;
重启tomcat服务
网页登录manager app
提示:登陆到manager app后,咱们就能够看到tomcat上全部的webapp,咱们能够在后面进行操做,中止启动,和重载以及卸载对应webapp;
测试:中止/test 看看对应webapp是否还能够访问?
提示:能够看到当咱们把对应webapp中止后,对应webapp就不可以访问了,访问它会告诉咱们该资源未找到,404错误;
启动/test webapp,看看是否立刻就能够访问了呢?
二、给host-manager配置帐号
提示:启动admin-gui角色,并把admin-gui角色拥有的权限附加到tomcat用户上;
重启tomcat
登陆主站的host manager
提示:能够看到登陆host-manager 应用中,咱们能够看到有一个默认的host是localhost,和一些服务器相关信息;
添加一个host
提示:app base路径须要在服务器上有该路径,而且须要咱们把对应的源码文件放进去;还须要注意对应目录tomcat用户能够读和进入到该目录的权限;
在windows上配置解析www.test.com 为192.168.0.22
测试:访问咱们刚才添加的host,看看是否可以访问到?
提示:tomcat监听在8080,因此咱们访问添加的虚拟主机也须要把端口带上;从上面的访问结果看,它提示咱们404网页文件未找到;其缘由是咱们在/tmp/下的/test/目录没有ROOT目录,默认状况访问虚拟主机,就至关于访问这个虚拟主机的主站,所谓主站就是访问的rul上没有rui,如上图所示;这时tomcat它会去对应目录下找ROOT目录里的主页文件(index.jsp);
提示:修改了/tmp/test/下的目录结构后,如今在访问看看?
提示:更改了/tmp/test/目录结构后,直接访问就能够访问到对应的页面了,这里须要注意一点,若是咱们刚才添加虚拟主机时,没有勾选支持自动部署,咱们还须要去部署才能够访问;
登陆server status 应用
提示:用刚才的tomcat用户就能够直接登陆server status 应用,由于刚才配置的tomcat用户是 admin-gui角色和manager-gui角色,这两个角色都有登陆访问server status的权限;
提示:server status 应用主要是用于查看服务器状态相关的信息;该页面主要记录了tomcat版本,jvm版本和对应服务器的版本信息以及服务器主机名,ip地址;jvm内存池使用相关信息;ajp链接器相关连接信息和http链接器相关信息;经过查看状态页面,咱们能够了解到服务器和tomcat的状况,从而进行优化和调整;