Tomcat的安装、部署和常用组件

===============================================================================

概述:

    本章将主要介绍Tomcat的安装部署和常用组件,具体内容如下:

  • Tomcat的安装及程序环境

    ·二进制程序包(binary)安装启动及程序环境

    ·rpm包的安装启动及程序环境

    ·Tomcat的配置文件

    ·JSP WebAPP的组织结构:

    ·webapp归档格式:

  • 部署(deploy)webapp的相关操作:

  • tomcat自带的两个管理应用程序;

    ·manager app

    ·host manager 

  • Tomcat常用组件的配置

===============================================================================

Tomcat的安装及程序环境

 1.安装Tomcat

Tomcat binary release:

  • # tar xf apache-tomcat-VERSION.tar.gz  -C /usr/local/

  • # cd /usr/local

  • # ln -sv apache-tomcat-VERSION  tomcat

Base Repo:

  • tomcat, tomcat-lib, tomcat-admin-webapps, tomcat-webapps, tomcat-docs-webapp

 2.Tomcat程序环境

二进制归档展开安装的程序环境

tomcat的目录结构

  • bin脚本,及启动时用到的类;

  • conf:配置文件;

  • lib:库文件,Java类库,jar;

  • logs:日志文件目录;

  • temp:临时文件目录;

  • webapps:webapp的默认目录;

  • work:工作目录;

catalina.sh 启动时的脚本会调用参数(start、stop、version,configtest)

wKiom1hT1ZaQNg1XAABhjODSW6A005.png

rpm包安装的程序环境:

配置文件:

  • /etc/tomcat

webapps存放位置:/var/lib/tomcat/webapps/

  • examples

  • manager

  • host-manager

  • docs

Tomcat的配置文件

server.xml:

  • 主配置文件;

web.xml:

  • 每个webapp只有“部署”后才能被访问,它的部署方式通常由web.xml进行定义,其存放位置为WEB-INF/目录中;此文件(主目录下的)为所有的webapps提供默认配置;

context.xml:

  • 每个web都可以专用的配置文件,它通常由专用的配置文件context.xml来定义,其存放位置为WEB-INF/目录中;此文件为所有的webapps提供默认配置;

tomcat-users.xml

  • 用户认证的账号和密码文件;

catalina.policy

  • 当使用-security选项启动tomcat时,用于为tomcat设置安全策略; 

catalina.properties:

  • Java属性的定义文件,用于设定类加载器路径,以及一些与JVM调优相关参数;

logging.properties:

  • 日志系统相关的配置;

 3.JSP WebAPP的组织结构:

/: webapps的根目录

index.jsp:主页;

WEB-INF/:

  • 当前webapp的私有资源路径;通常用于存储当前webapp的web.xml和context.xml配置文件;不能通过网页进行访问

META-INF/:

  • 类似于WEB-INF/;

classes/:

  • 类文件,当前webapp所提供的类;

lib/:

  • 类文件,当前webapp所提供的类,被打包为jar格式;

 4.webapp归档格式:

  • .war:webapp(多数情况下的归档文件)

  • .jar:EJB的类打包文件;

  • .rar:资源适配器类打包文件;

  • .ear:企业级webapp;

二进制程序包(binary)安装启动演示:

 1.在官方下载tomcat的二进制程序包,并解压到/usr/local目录下,创建软连接

[root@centos7 tomcat]# ls
apache-tomcat-8.0.23.tar.gz # 下载的二进制程序包

[root@centos7 tomcat]# tar xf apache-tomcat-8.0.23.tar.gz -C /usr/local #解压到/usr/local目录中
[root@centos7 tomcat]# cd /usr/local
[root@centos7 local]# ll
total 0
drwxr-xr-x   9 root root 149 Dec 16 15:53 apache-tomcat-8.0.23
drwxr-xr-x.  2 root root   6 Aug 12  2015 bin
drwxr-xr-x.  2 root root   6 Aug 12  2015 etc
drwxr-xr-x.  2 root root   6 Aug 12  2015 games
drwxr-xr-x  14 root root 151 Aug 24 22:19 http2
drwxr-xr-x.  2 root root   6 Aug 12  2015 include
drwxr-xr-x.  2 root root   6 Aug 12  2015 lib
drwxr-xr-x.  2 root root   6 Aug 12  2015 lib64
drwxr-xr-x.  2 root root   6 Aug 12  2015 libexec
drwxr-xr-x.  2 root root   6 Aug 12  2015 sbin
drwxr-xr-x.  5 root root  46 Jul 25 23:57 share
drwxr-xr-x.  2 root root   6 Aug 12  2015 src

[root@centos7 local]# ln -sv apache-tomcat-8.0.23 tomcat # 创建软连接
‘tomcat’ -> ‘apache-tomcat-8.0.23’
[root@centos7 local]# ll
total 0
drwxr-xr-x   2 root root   6 Dec 16 15:54 apache-tomcat-8.0.23
drwxr-xr-x.  2 root root   6 Aug 12  2015 bin
drwxr-xr-x.  2 root root   6 Aug 12  2015 etc
drwxr-xr-x.  2 root root   6 Aug 12  2015 games
drwxr-xr-x  14 root root 151 Aug 24 22:19 http2
drwxr-xr-x.  2 root root   6 Aug 12  2015 include
drwxr-xr-x.  2 root root   6 Aug 12  2015 lib
drwxr-xr-x.  2 root root   6 Aug 12  2015 lib64
drwxr-xr-x.  2 root root   6 Aug 12  2015 libexec
drwxr-xr-x.  2 root root   6 Aug 12  2015 sbin
drwxr-xr-x.  5 root root  46 Jul 25 23:57 share
drwxr-xr-x.  2 root root   6 Aug 12  2015 src
lrwxrwxrwx   1 root root  20 Dec 16 15:54 tomcat -> apache-tomcat-8.0.23

 2.查看Tomcat程序环境的组成结构

[root@centos7 local]# cd tomcat/
[root@centos7 tomcat]# ll
total 96
drwxr-xr-x 2 root root  4096 Dec 16 16:01 bin   # 二进制程序,因为是java程序,所以主要为脚本
drwxr-xr-x 2 root root  4096 May 19  2015 conf  # 配置文件目录
drwxr-xr-x 2 root root  4096 Dec 16 16:01 lib   # 库文件,打包为.jar文件
-rw-r--r-- 1 root root 56977 May 19  2015 LICENSE
drwxr-xr-x 2 root root     6 May 19  2015 logs  # 日志文件
-rw-r--r-- 1 root root  1397 May 19  2015 NOTICE
-rw-r--r-- 1 root root  6741 May 19  2015 RELEASE-NOTES
-rw-r--r-- 1 root root 16204 May 19  2015 RUNNING.txt
drwxr-xr-x 2 root root    29 Dec 16 16:01 temp      # 临时文件
drwxr-xr-x 7 root root    76 May 19  2015 webapps  # 应用程序的根目录
drwxr-xr-x 2 root root     6 May 19  2015 work     # 工作目录。

[root@centos7 tomcat]# ls bin/
bootstrap.jar  catalina-tasks.xml            configtest.bat  digest.bat        setclasspath.sh  startup.bat      tomcat-native.tar.gz  version.bat
catalina.bat   commons-daemon.jar            configtest.sh   digest.sh         shutdown.bat     startup.sh       tool-wrapper.bat      version.sh
catalina.sh    commons-daemon-native.tar.gz  daemon.sh       setclasspath.bat  shutdown.sh      tomcat-juli.jar  tool-wrapper.sh

[root@centos7 tomcat]# ls conf/
catalina.policy  catalina.properties  context.xml  logging.properties  server.xml  tomcat-users.xml  tomcat-users.xsd  web.xml

[root@centos7 tomcat]# ls lib/
annotations-api.jar  catalina.jar              ecj-4.4.2.jar  jasper.jar       tomcat-api.jar     tomcat-i18n-es.jar  tomcat-jdbc.jar  tomcat-util-scan.jar
catalina-ant.jar     catalina-storeconfig.jar  el-api.jar     jsp-api.jar      tomcat-coyote.jar  tomcat-i18n-fr.jar  tomcat-jni.jar   tomcat-websocket.jar
catalina-ha.jar      catalina-tribes.jar       jasper-el.jar  servlet-api.jar  tomcat-dbcp.jar    tomcat-i18n-ja.jar  tomcat-util.jar  websocket-api.jar

[root@centos7 tomcat]# ls webapps/
docs  examples  host-manager  manager  ROOT

[root@centos7 tomcat]# ls work/ # 每一个jsp程序在运行前要先转化为servlet代码,然后编译。整个中间过程的存放位置

 3.使用catalina.sh脚本调用version参数查看版本

[root@centos7 tomcat]# bin/catalina.sh version
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.23
Server built:   May 19 2015 14:58:38 UTC
Server number:  8.0.23.0
OS Name:        Linux
OS Version:     3.18.41-1.0-Taolinux
Architecture:   amd64
JVM Version:    1.8.0_25-b17
JVM Vendor:     Oracle Corporation

 4.tomcat的启用最好用普通用户,所以创建tomcat用户,并修改目录的属主和属组,启动服务,如下:

[root@centos7 tomcat]# useradd -r tomcat
[root@centos7 tomcat]# chown -R tomcat.tomcat /usr/local/tomcat/*
[root@centos7 tomcat]# ll
total 96
drwxr-xr-x 2 tomcat tomcat  4096 Dec 16 16:01 bin
drwxr-xr-x 2 tomcat tomcat  4096 May 19  2015 conf
drwxr-xr-x 2 tomcat tomcat  4096 Dec 16 16:01 lib
-rw-r--r-- 1 tomcat tomcat 56977 May 19  2015 LICENSE
drwxr-xr-x 2 tomcat tomcat     6 May 19  2015 logs
-rw-r--r-- 1 tomcat tomcat  1397 May 19  2015 NOTICE
-rw-r--r-- 1 tomcat tomcat  6741 May 19  2015 RELEASE-NOTES
-rw-r--r-- 1 tomcat tomcat 16204 May 19  2015 RUNNING.txt
drwxr-xr-x 2 tomcat tomcat    29 Dec 16 16:01 temp
drwxr-xr-x 7 tomcat tomcat    76 May 19  2015 webapps
drwxr-xr-x 2 tomcat tomcat     6 May 19  2015 work

# 使用tomcat用户启动服务
[root@centos7 tomcat]# su - tomcat -c '/usr/local/tomcat/bin/catalina.sh start'
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started. # 提示启动成功

# 查看端口8080,8009
[root@centos7 tomcat]# ss -tnl
State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port              
LISTEN     0      25                     *:514                                *:*                  
LISTEN     0      128                    *:22                                 *:*                  
LISTEN     0      128            127.0.0.1:631                                *:*                  
LISTEN     0      100            127.0.0.1:25                                 *:*                  
LISTEN     0      128            127.0.0.1:6010                               *:*                  
LISTEN     0      128            127.0.0.1:6011                               *:*                  
LISTEN     0      25                    :::514                               :::*                  
LISTEN     0      100                   :::8009                              :::*                  
LISTEN     0      100                   :::8080                              :::*                  
LISTEN     0      128                   :::22                                :::*                  
LISTEN     0      128                  ::1:631                               :::*                  
LISTEN     0      100                  ::1:25                                :::*                  
LISTEN     0      128                  ::1:6010                              :::*                  
LISTEN     0      128                  ::1:6011                              :::*

 5.浏览器访问如下:

wKiom1hT2RDDFNwQAALenurnkyM225.png


  6.编辑/etc/profile.d/配置文件,输出CATALINA_BASE环境变量

[root@centos7 ~]# vim /etc/profile.d/tomcat.sh # 添加环境变量
 export CATALINA_BASE=/usr/local/tomcat
 export PATH=$CATALINA_BASE/bin:$PATH
[root@centos7 ~]# . /etc/profile.d/tomcat.sh  # 重读配置文件生效
 
[root@centos7 ~]# catalina.sh version  # 查看版本
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Server version: Apache Tomcat/8.0.23
Server built:   May 19 2015 14:58:38 UTC
Server number:  8.0.23.0
OS Name:        Linux
OS Version:     3.18.41-1.0-Taolinux
Architecture:   amd64
JVM Version:    1.8.0_25-b17
JVM Vendor:     Oracle Corporation

--------------------------------------------------------------------------------

Base Repo安装启动演示:

 1.安装程序包

[root@centos7 ~]# yum list all tomcat* # 查看tomcat相关程序包如下:
Available Packages
tomcat.noarch                                7.0.54-2.el7_1                CDROM
tomcat-admin-webapps.noarch                  7.0.54-2.el7_1                CDROM
tomcat-docs-webapp.noarch                    7.0.54-2.el7_1                CDROM
tomcat-el-2.2-api.noarch                     7.0.54-2.el7_1                CDROM
tomcat-javadoc.noarch                        7.0.54-2.el7_1                CDROM
tomcat-jsp-2.2-api.noarch                    7.0.54-2.el7_1                CDROM
tomcat-jsvc.noarch                           7.0.54-2.el7_1                CDROM
tomcat-lib.noarch                            7.0.54-2.el7_1                CDROM
tomcat-native.x86_64                         1.1.34-1.el7                  epel 
tomcat-servlet-3.0-api.noarch                7.0.54-2.el7_1                CDROM
tomcat-webapps.noarch                        7.0.54-2.el7_1                CDROM
tomcatjss.noarch                             7.1.2-1.el7                   CDROM

# 安装程序包,这里会自动解决依赖关系
[root@centos7 ~]# yum install -y tomcat tomcat-lib tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp

  2.查看程序环境

[root@centos7 ~]# rpm -ql tomcat
/etc/logrotate.d/tomcat
/etc/sysconfig/tomcat
/etc/tomcat # 配置文件目录
/etc/tomcat/Catalina
/etc/tomcat/Catalina/localhost
/etc/tomcat/catalina.policy
/etc/tomcat/catalina.properties
/etc/tomcat/context.xml
/etc/tomcat/log4j.properties
/etc/tomcat/logging.properties
/etc/tomcat/server.xml
/etc/tomcat/tomcat-users.xml
/etc/tomcat/tomcat.conf
/etc/tomcat/web.xml
/usr/bin/tomcat-digest
/usr/bin/tomcat-tool-wrapper
/usr/lib/systemd/system/tomcat.service  # Until File文件
/usr/lib/systemd/system/tomcat@.service
/usr/lib/tmpfiles.d/tomcat.conf
/usr/libexec/tomcat
/usr/libexec/tomcat/functions
/usr/libexec/tomcat/preamble
/usr/libexec/tomcat/server
/usr/sbin/tomcat          # 程序文件
/usr/share/doc/tomcat-7.0.54
/usr/share/doc/tomcat-7.0.54/LICENSE
/usr/share/doc/tomcat-7.0.54/NOTICE
/usr/share/doc/tomcat-7.0.54/RELEASE-NOTES
/usr/share/tomcat
/usr/share/tomcat/bin/bootstrap.jar
/usr/share/tomcat/bin/catalina-tasks.xml
/usr/share/tomcat/conf
/usr/share/tomcat/lib
/usr/share/tomcat/logs
/usr/share/tomcat/temp
/usr/share/tomcat/webapps
/usr/share/tomcat/work
/var/cache/tomcat
/var/cache/tomcat/temp
/var/cache/tomcat/work
/var/lib/tomcat
/var/lib/tomcat/webapps
/var/lib/tomcats
/var/log/tomcat
/var/log/tomcat/catalina.out
/var/run/tomcat.pid

[root@centos7 ~]# ll /etc/tomcat/  # 配置文件
total 208
drwxrwxr-x 3 root   tomcat     22 Dec 16 16:27 Catalina
-rw-rw-r-- 1 tomcat tomcat  12257 May 13  2015 catalina.policy
-rw-rw-r-- 1 tomcat tomcat   6294 May 13  2015 catalina.properties
-rw-rw-r-- 1 tomcat tomcat   1394 May 13  2015 context.xml
-rw-rw-r-- 1 tomcat tomcat    547 May 13  2015 log4j.properties
-rw-rw-r-- 1 tomcat tomcat   3288 May 13  2015 logging.properties
-rw-rw-r-- 1 tomcat tomcat   6536 May 13  2015 server.xml
-rw-rw-r-- 1 tomcat tomcat   1568 May 13  2015 tomcat.conf
-rw-rw---- 1 tomcat tomcat   1998 May 13  2015 tomcat-users.xml
-rw-rw-r-- 1 tomcat tomcat 163385 May 13  2015 web.xml

[root@centos7 ~]# ll /var/lib/tomcat  # 查看webapps文件
total 0
drwxrwxr-x 8 root tomcat 89 Dec 16 16:27 webapps
[root@centos7 ~]# ll /var/lib/tomcat/webapps/
total 8
drwxr-xr-x 14 root   root   4096 Dec 16 16:27 docs
drwxr-xr-x  8 tomcat tomcat  120 Dec 16 16:27 examples
drwxr-xr-x  5 root   tomcat   82 Dec 16 16:27 host-manager
drwxr-xr-x  5 root   tomcat   97 Dec 16 16:27 manager
drwxr-xr-x  3 tomcat tomcat 4096 Dec 16 16:27 ROOT
drwxr-xr-x  5 tomcat tomcat   81 Dec 16 16:27 sample

 3.启动tomcat并查看端口8080

[root@centos7 ~]# systemctl start tomcat.service  # 直接启动tomcat服务

[root@centos7 ~]# ss -tnl  # 查看监听端口8080,8009
State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port              
LISTEN     0      128                    *:22                                 *:*                  
LISTEN     0      128            127.0.0.1:631                                *:*                  
LISTEN     0      100            127.0.0.1:25                                 *:*                  
LISTEN     0      128            127.0.0.1:6010                               *:*                  
LISTEN     0      100                   :::8009                              :::*                  
LISTEN     0      100                   :::8080                              :::*                  
LISTEN     0      128                   :::22                                :::*                  
LISTEN     0      128                  ::1:631                               :::*                  
LISTEN     0      100                  ::1:25                                :::*                  
LISTEN     0      128                  ::1:6010                              :::*

 4.在浏览器中访问如下:

wKiom1hT2eSAl758AALcSXArK5M233.png




Tomcat部署(deploy)

 1.部署(deploy)webapp的相关操作:

deploy:

  • 将webapp的源文件放置于目标目录(网页程序文件存放位置的目录),配置tomcat服务器能够基于web.xml和context.xml文件中定义的路径来访问此webapp;

  • 将其特有的类和依赖的类通过class loader装载至JVM;

部署有两种方式:

自动部署:auto deploy

手动部署:

  • 冷部署:停止Tomcat,把webapp复制到指定的位置,而后才启动tomcat;

  • 热部署:在不停止tomcat的前提下进行部署;

      部署工具:manager、ant脚本、tcd(tomcat client deployer)等;

undeploy:反部署,

  • 停止webapp,并从tomcat实例上卸载webapp;

start:启动处于停止状态的webapp;

stop:停止webapp,不再向用户提供服务;其类依然在jvm上;

redeploy:重新部署;

演示:手动提供一测试类应用,并冷部署:

 1.首先停止tomcat服务,实施冷部署

[root@centos7 ~]# su - tomcat -c '/usr/local/tomcat/bin/catalina.sh stop'
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

 2.在webapps的源文件中创建存放网页程序文件的目录test(创建webapp特有的目录结构),并提供jsp格式的测试页面文件,如下:

[root@centos7 ~]# mkdir -pv /usr/local/tomcat/webapps/test/{classes,lib,WEB-INF}
mkdir: created directory ‘/usr/local/tomcat/webapps/test’
mkdir: created directory ‘/usr/local/tomcat/webapps/test/classes’
mkdir: created directory ‘/usr/local/tomcat/webapps/test/lib’
mkdir: created directory ‘/usr/local/tomcat/webapps/test/WEB-INF’
[root@centos7 ~]# vim /usr/local/tomcat/webapps/test/index.jsp
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
    <head>
       <title>Test Page</title>
    </head>
    <body>
       <% out.println("hello world");   # 测试页面
       %>
    </body>
</html>

  3.部署完毕,重新启动tomcat服务,浏览器访问如下:

wKioL1hkiX_AcsEeAABI8lJQvOM712.png

 4.查看工作过程可以通过查看work目录,如下:

[root@centos7 tomcat]# tree work/
work/
└── Catalina
    └── localhost
        ├── docs
        ├── examples
        ├── host-manager
        ├── manager
        ├── ROOT
        │   └── org
        │       └── apache
        │           └── jsp
        │               ├── index_jsp.class
        │               └── index_jsp.java
        └── test
            └── org
                └── apache
                    └── jsp
                        ├── index_jsp.class # 源程序编译后的字节码文件
                        └── index_jsp.java  # 通过jasper将jsp代码翻译为servlet代码(源程序文件)

14 directories, 4 files



2.tomcat自带的两个管理应用程序:

manager app

  • webapp管理工具

host-manager

  • Vhosts(虚拟主机)管理工具

 1.在Tomcat访问页面中,点击manager App,提示登录信息;点击取消登录后,会提示未经认证不允许登录,并提供登录方法,如下:

wKioL1hk-NuigBlQAAGJF8KGtXY487.png

wKiom1hk-NyS_4wIAAD0gVSsl24109.png


 2.根据提示,要想使用manager app管理部署,就需要在/conf/tomcat-user.xml文件中添加一个manager-gui的角色,并创建用户和密码,且要求用户属于manager-gui的角色,如下:

[root@centos7 ~]# cd /usr/local/tomcat
[root@centos7 tomcat]# ls
bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@centos7 tomcat]# cd conf
[root@centos7 conf]# ls
Catalina  catalina.policy  catalina.properties  context.xml  logging.properties  server.xml  tomcat-
[root@centos7 conf]# vim tomcat-users.xml

wKioL1hlIZbSFPqPAAAOuznD9b8329.png 

 3.重启tomcat服务

[root@centos7 conf]# su - tomcat -c 'catalina.sh stop'
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
[root@centos7 conf]# ss -tnl
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:631                                                                 *:*                  
LISTEN      0      100                                             127.0.0.1:25                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:6011                                                                *:*                  
LISTEN      0      25                                                      *:514                                                                 *:*                  
LISTEN      0      128                                                    :::22                                                                 :::*                  
LISTEN      0      128                                                   ::1:631                                                                :::*                  
LISTEN      0      100                                                   ::1:25                                                                 :::*                  
LISTEN      0      128                                                   ::1:6011                                                               :::*                  
LISTEN      0      25                                                     :::514                                                                :::*                  
[root@centos7 conf]# su - tomcat -c 'catalina.sh start'
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@centos7 conf]# ss -tnl
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:631                                                                 *:*                  
LISTEN      0      100                                             127.0.0.1:25                                                                  *:*                  
LISTEN      0      128                                             127.0.0.1:6011                                                                *:*                  
LISTEN      0      25                                                      *:514                                                                 *:*                  
LISTEN      0      100                                                    :::8009                                                               :::*                  
LISTEN      0      100                                                    :::8080                                                               :::*                  
LISTEN      0      128                                                    :::22                                                                 :::*                  
LISTEN      0      128                                                   ::1:631                                                                :::*                  
LISTEN      0      100                                                   ::1:25                                                                 :::*                  
LISTEN      0      128                                                   ::1:6011                                                               :::*                  
LISTEN      0      25                                                     :::514                                                                :::*

 4.在浏览器中再次请求访问manager App输入用户名tomcat,密码tomcat登录后就可以进行部署了,如下:

wKiom1hk_aviZGkkAAGO9pGIquc821.png

wKiom1hk_m-SCL4TAADIM3PPPFg451.png

wKioL1hk_m_DEmZyAACRotb78Gw197.png

wKioL1hlAP7R9wr4AABY6UJY7pA363.png

 5.我们也可以点击Server Statua查案当前服务器状态,如下:

wKioL1hlAsXzPKW8AADlJjErg5Y288.png

wKiom1hlAsbw2vxzAABkgRXF5_Y432.png

wKioL1hlAsbQABRIAABFa6ICB6w277.png

Tomcat的常用组件配置:(conf/server.xml)

 每个组件几乎都是通过特有的类来实现,而且有的组件还不止一种实现方式

 1.Server:

代表tomcat instance(实例),即表现出的一个jvm进程;监听在8005端口,只接收“SHUTDOWN”。各server监听的端口不能相同,因此,在同一物理主机启动多个实例时,需要修改其监听端口为不同的端口;

wKiom1hlDseQc35pAAAJGeYIZQ4628.png

 2.Service:

用于实现将一个或多个connector组件关联至一个engine组件;

wKioL1hlFKHDlUudAAAF8YEGgUo242.png

  3.Connector(连接器)组件:接入前端用户请求

进入tomcat的请求可分为两类:

standalone:

  • Tomcat作为独立的应用程序服务器,请求来自于客户端浏览器;

可用的连接器:

  • httpd,https

由其它的web server反代:

  • Tomcat作为应用程序服务器,请求将来自于前端的反代服务器;

可用的连接器:

  • nginx --> http/https connector --> tomcat 

  • httpd --> http/https/ajp connector --> tomcat

属性:

  • address:                     监听的IP地址;默认为本机所有可用地址;

  • maxThreads:              最大并发连接数,默认为150;

  • port:                           监听的端口;

  • protocol:                    连接器使用的协议,一般为HTTP/1.1或AJP/1.3;

  • redirecport:                重定向到的端口;

  • connectionTimeout:  连接的超时时长,单位为毫秒,默认为60000;

  • enableLookups:         是否启用DNS查询功能;

  • acceptCount:             定义等待队列的最大长度;

  • scheme:                     客户端请求时对应映射的协议的类型;

  • debug:                       连接器的调试功能

  • secure:                       安全模式(ssl)

  • clientAuth:                 是否验证客户端证书;

  • sslProtocol:                安全证书的协议版本,建议使用TLS;

wKiom1hlHh_iOrn2AABkn2BoCws450.png


 4.Engine组件:

作用:

  • Servlet实例,即servlet引擎,其内部可以有一个或多个host组件来定义站点; 通常需要通过defaultHost来定义默认的虚拟主机;

属性:

  • name=

  • defaultHost="localhost"

  • jvmRoute=

wKioL1hlIBDQ4V2wAAAHiaq7LoY558.png

 5.Host组件:

作用:

  • 位于engine内部用于接收请求并进行相应处理的主机或虚拟主机;

属性:

 appBase:

  • 此Host的webapps的默认存放目录,指存放非归档的web应用程序的目录或归档的WAR文件目录路径;可以使用基于$CATALINA_BASE变量所定义的路径的相对路径;

 autoDeploy:

  • 在Tomcat处于运行状态时,将某webapp放置于appBase所定义的目录中时,是否自动将其部署至tomcat;

unpackWARs:

  • 在启用webapps时,是否对WAR格式的归档文件先进行展开,默认为ture;

wKioL1hlzfOjhGNuAAAMHZASrBo833.png

演示:定义虚拟主机

1.编辑/usr/local/tomcat/conf/server.xml再添加一个主机名为node1.taotao.com的虚拟主机,如下:

wKiom1hl0p_xNXP5AABpkM4D8hc648.png


 2.创建相应的目录,并提供测试页面要放在ROOT目录之下,如下:

[root@centos7 tomcat]# mkdir -pv /data/webapps/ROOT/{classes,lib,WEB-INF,META-INF}
mkdir: created directory ‘/data/webapps’
mkdir: created directory ‘/data/webapps/ROOT’
mkdir: created directory ‘/data/webapps/ROOT/classes’
mkdir: created directory ‘/data/webapps/ROOT/lib’
mkdir: created directory ‘/data/webapps/ROOT/WEB-INF’
mkdir: created directory ‘/data/webapps/ROOT/META-INF’

[root@centos7 tomcat]# vim /data/webapps/ROOT/index.jsp 
 <%@ page language="java" %>
 <%@ page import="java.util.*" %>
 <html>
    <head>
        <title>Test Page</title>
    </head>
    <body>
        <% out.println("hello world from node1");
        %>
    </body>
 </html>

 3.停止tomcat服务,检测语法,没问题然后重启tomcat服务,如下:

[root@centos7 tomcat]# su - tomcat -c 'catalina.sh stop'
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

[root@centos7 tomcat]# catalina.sh configtest  # 语法检测
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat/8.0.23
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          May 19 2015 14:58:38 UTC
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         8.0.23.0
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         /usr/local/apache-tomcat-8.0.23
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         /usr/local/apache-tomcat-8.0.23
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=/usr/local/tomcat/endorsed
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=/usr/local/tomcat
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=/usr/local/tomcat
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
Dec 30, 2016 11:30:38 AM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Dec 30, 2016 11:30:38 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Dec 30, 2016 11:30:38 AM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Dec 30, 2016 11:30:38 AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Dec 30, 2016 11:30:38 AM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Dec 30, 2016 11:30:38 AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1408 ms

[root@centos7 tomcat]# su - tomcat -c 'catalina.sh start' # 启动服务
su: warning: cannot change directory to /home/tomcat: No such file or directory
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/java/latest
Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.

 4.找一台能够解析node1的主机测试,发现可以正常访问定义的虚拟主机,如下:

[root@centos7 ~]# curl http://node1.taotao.com:8080


<html>
   <head>
       <title>Test Page</title>
   </head>
   <body>
       hello world from node1

   </body>
</html>

 5.除此之外,我们也可以在tomcat的页面中通过Host Manager进行管理,管理之前同Manager App一样需要首先添加角色,并使用户属于此角色,如下,编辑/usr/local/tomcat/conf/tomcat/users.xml

wKioL1hl20CB05RsAAAUG0OnY40442.png

   重启tomcat服务,然后再次访问就可以看到虚拟主机的管理界面额了,如下:

wKiom1hl3HTRiR_6AADYT_S3Sjc536.png

wKioL1hl3HXxylLTAABDETmUIV8933.png

 6.Context组件:

作用:

  • Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中一个Web应用程序;

属性:

docBase:

  • 相应web应用程序的存放位置;也可以使用相对路径,起始路径为此Contaxt所属Host中appBase定义的路径;切记,docBase的路径名不能与相应的Host中appBase中定义的路径名有包含关系,比如:appBase为deploy,而docBase绝不能为deploy-bb类的名字;

path:

  • 相对于web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径;如果context定义在一个单独的xml文件中,此属性不需要定义;

reloadable:

  • 是否允许重新加载此context相关的Wen应用程序的类;默认为false;

示例:

wKiom1jRRZijeUPgAAAOQqtsiUw336.png

演示:定义Context标识tomcat实例中一个web应用程序
 1.编辑配置文件conf/server.xml在上例中定义个Host中定义Context如下:

wKioL1hl6eqBDA27AAAfXzNqGcc031.png

  2.为testapp提供相关目录及测试页面,如下:

[root@centos7 tomcat]# cp -r /data/webapps/ROOT/ /data/webapps/testapp
[root@centos7 tomcat]# vim /data/webapps/testapp/index.jsp 
 <%@ page language="java" %>
 <%@ page import="java.util.*" %>
 <html>
    <head>
        <title>Test Page for Context</title> 
    </head>
    <body>
        <% out.println("hello world from /data/webapps/testapp");
        %>
    </body>
 </html>

 3.重启tomcat服务,在能够解析node1的主机上使用curl请求,可以正常访问web资源,如下:

[root@centos7 ~]# curl http://node1.taotao.com:8080/test/


<html>
   <head>
       <title>Test Page for Context</title> 
   </head>
   <body>
       hello world from /data/webapps/testapp

   </body>
</html>

 

 7.Valve组件:

作用:

  • Value组件类似于过滤器,它可以工作于Engine和Host/Context之间、Host和Context之间以及Context和Web应用程序的某资源之间。一个容器可以建多个Value,而且Value定义的次序也决定了他们生效的次序。

Valve存在多种类型:

  • 定义访问日志:org.apache.catalina.valves.AccessLogValve

  • 定义基于远程地址的访问控制:org.apache.catalina.valves.RemoteAddrValve 

  • 定义基于主机名的访问控制:org.apache.catalina.valves.RemoteHostValve 

wKioL1hmIHKihK_TAAAVoyxNg4M874.png

RemoteHostValve 和RemoteAddrValve 

  • 可以分别用来实现基于主机名称和ip地址的访问控制,控制本身可通过allow或deny来进行定义,这点类似于Apache的访问控制功能;

相关属性定义:

className:

  • 相关的java实现的类名,相应于分别应该为org.apache.catalina.valves.RemoteHostValve org.apache.catalina.valves.RemoteHostValve ;

allow:

  • 以逗号分开的允许访问的IP地址列表,支持正则表达式,因此,点号“.”用于IP地址时需要转义;仅定义allow项时,非明确allow的地址均被deny;

deny:

  • 以逗号分开的禁止访问的IP地址列表,支持正字表达式,使用方式同allow

wKioL1hmMNbTrPGXAAAM52xZw3I329.png

演示1:定义访问日志
  1.编辑conf/server.xml在之前定义的虚拟主机node1.taotao.com上定义访问日志,如下:

wKioL1hmJzzioD_rAAAttA39eKc640.png

 2.重启tomcat服务,访问虚拟主机,并查看在/usr/local/tomcat/logs中查看定义的访问日志,如下:

# 重启tomcat服务
[root@centos7 conf]# su - tomcat -c 'catalina.sh stop'

[root@centos7 conf]# su - tomcat -c 'catalina.sh configtest'

[root@centos7 conf]# su - tomcat -c 'catalina.sh start'

# 访问此虚拟主机的web资源
[root@centos7 ~]# curl http://node1.taotao.com:8080


<html>
   <head>
       <title>Test Page</title>
   </head>
   <body>
       hello world from /data/webapps

   </body>
</html>
[root@centos7 ~]# curl http://node1.taotao.com:8080/test/


<html>
   <head>
       <title>Test Page for Context</title> 
   </head>
   <body>
       hello world from /data/webapps/testapp

   </body>
</html>

# 查看访问日志
[root@centos7 logs]# cat node1_access_log.2016-12-30.log 
192.168.1.113 - - [30/Dec/2016:16:58:54 +0800] "GET / HTTP/1.1" 200 130
192.168.1.113 - - [30/Dec/2016:16:59:40 +0800] "GET /test/ HTTP/1.1" 200 151
192.168.1.113 - - [30/Dec/2016:16:59:45 +0800] "GET / HTTP/1.1" 200 130

演示2:定义基于远程IP的访问控制

  1.编辑conf/server.xml在之前定义的虚拟主机node1.taotao.com的Context中定义禁止192.168.1.112主机访问,如下:

wKioL1hmL-GiFWdeAAA9iSstMrc340.png

    2.重启tomcat服务,访问虚拟主机node1.taotao.com下的test资源,可以发现禁止访问,可见这里定义的访问控制生效

# 没有定义访问控制的可以继续访问 
[root@centos7 ~]# curl http://node1.taotao.com:8080/

<html>
   <head>
       <title>Test Page</title>
   </head>
   <body>
       hello world from /data/webapps

   </body>
</html>

# 定义访问控制的/test 被被禁止 
[root@centos7 ~]# curl http://node1.taotao.com:8080/test/  
<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.23 - Error report</title><style type="text/css">H1 
{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:22px;} H2 
{font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;font-size:16px;} H3 
{color : black;}A.name {color : black;}.line {height: 1px; background-color: #525D76; 
border: none;}</style> </head><body><h1>HTTP Status 403 - </h1><div class="line"></div><p><b>type</b> 
Status report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>Access to the specified resource 
has been forbidden.</u></p><hr class="line"><h3>Apache Tomcat/8.0.23</h3></body></html>