前文我们聊到了java相关重要组件和它们之间的关系以及jdk、tomcat部署回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13302938.html;今天我们来聊一聊tomcat的配置使用相关话题;
一、tomcat配置相关文件简介
1、server.xml
server.xml的配置文件格式大致如下
<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与文件系统路径的对应关系和访问权限相关配置;
对于tomcat配置文件server.xml中的组件,其实都是Java的类实现,这些组件大体可分为如下类型:
顶级组件:Server
服务类组件:Service
连接器组件:http,https,ajp(apache jserv protocol)
容器类:Engine,Host,Context
被嵌套类:valve,logger,realm,loader,manager,...
集群类组件:listener,cluster,...
2、web.xml:每个webapp只有部署后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;通常情况每个webapp项目中都会有WEB-INF或Meta-INF目录,该目录就是用于存放该项目部署相关配置(web.xml或者context.xml),如果对应项目里没有这个目录,那么tomcat中的web.xml就提供默认部署相关配置;
3、context.xml:webapp的专用配置文件,其存放位置为WEB-INF/目录中;该文件和web.xml文件类似,如果对应webapp项目中没有WEB-INF或Meta-INF目录,那么tomcat中的content.xml就是为其提供默认配置;
4、tomcat-users.xml:用户认证的账号和密码文件;
5、catalina.policy:当使用-security选项启动tomcat时,用于为tomcat设置安全策略;
6、catalina.properties:Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;
7、logging.properties:日志系统相关的配置;
二、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这类文件通常是把类和类相关的资源封装压缩在一起的归档文件;通常用于部署和封装库、组件和插件程序;
.ear这类文件是企业级webapp打包文件,和.war不同的是,ear是针对EJB容器,.war针对web容器;ear包含war;
三、部署webapp的相关术语:
1、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)等;
2、undeploy(反部署):所谓反部署就是部署的逆向操作,停止webapp并从tomcat实例上卸载webapp的操作叫反部署;
3、start:启动处于停止状态的webapp;
4、stop:停止webapp,使其不再像客户提供服务,但是类依然在jvm上;
5、redeploy:重新部署;
示例:手动提供一测试类应用,并冷部署到tomcat上
1、创建目录结构
提示:在webapps目录下创建项目目录;这里说一下webapps目录,这个目录默认配置是支持热部署的,其中ROOT目录是主站点源码文件存放地,存放在ROOT目录下的文件在访问时可以不用加任何uri就可以访问得到,其他目录需要加对应目录名为uri才可以被访问;
2、创建index.jsp文件
提示:index.jsp文件中就做了一件事,打印hello world这句话;
3、更改目录权限
提示:新建的文件我们需要保证tomcat用户有可以正常的读取即可,对于目录tomcat用户可以进入即可;
4、启动tomcat
提示:默认情况tomcat所在webapps目录下的子目录是可以通过访问对应目录名称访问到的,我们把网页脚本文件放到webapps目录下的子目录下,不停tomcat也是可以访问到,原因是tomcat默认就支持热部署;如下配置文件所示
验证:用浏览器访问我们刚才部署testwebapp,看看是否能够被访问到?
提示:可以看到我们访问对应子目录的名称是可以正常访问到对应目录下的index.jsp文件;
四、利用tomcat的两个管理应用来部署webapp
1、给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,看看是否马上就可以访问了呢?
2、给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的情况,从而进行优化和调整;