1.Tomcat 简介
Tomcat 是 Apache 软件基金会(Apache Software Foundation)的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
Tomcat 和 Nginx、Apache(httpd)、lighttpd 等 Web 服务器一样,具有处理 HTML 页面的功能,另外它还是一个 Servlet 和 JSP 容器,独立的 Servlet 容器是 Tomcat 的默认模式。不过,Tomcat 处理静态 HTML 的能力不如 Nginx/Apache 服务器。
2.Tomcat 安装
2.1 环境准备
具体环境可通过开发人员来定,这儿给出了本次实验的环境。
链接:https://pan.baidu.com/s/1uOEy… 密码:pt3l
2.2 部署 java 环境
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
2.3 安装 Tomcat
~]# tar -xf apache-tomcat-8.0.27.tar.gz -C /app/
~]# ln -s /app/apache-tomcat-8.0.27 /app/tomcat
~]# echo 'export TOMCAT_HOME=/app/tomcat'>>/etc/profile.d/tomcat.sh
~]# source /etc/profile.d/tomcat.sh
~]# chown -R root.root /app/jdk/ /app/tomcat/
2.4 Tomcat 目录介绍
[root@tomcat ~]# cd /app/tomcat/
[root@tomcat tomcat]# tree -L 1
.
├── bin #→用以启动、关闭 Tomcat 或者其它功能的脚本(.bat 文件和.sh 文件)├── conf #→用以配置 Tomcat 的 XML 及 DTD 文件
├── lib #→存放 web 应用能访问的 JAR 包
├── LICENSE
├── logs #→Catalina 和其它 Web 应用程序的日志文件
├── NOTICE
├── RELEASE-NOTES
├── RUNNING.txt
├── temp #→临时文件
├── webapps #→Web 应用程序根目录
└── work #→用以产生有 JSP 编译出的 Servlet 的.java 和.class 文件
7 directories, 4 files
[root@tomcat tomcat]# cd webapps/
[root@tomcat webapps]# ll
total 20
drwxr-xr-x 14 root root 4096 Oct 5 12:09 docs #→tomcat 帮助文档
drwxr-xr-x 6 root root 4096 Oct 5 12:09 examples #→web 应用实例
drwxr-xr-x 5 root root 4096 Oct 5 12:09 host-manager #→管理
drwxr-xr-x 5 root root 4096 Oct 5 12:09 manager #→管理
drwxr-xr-x 3 root root 4096 Oct 5 12:09 ROOT #→默认网站根目录
2.5 启动 Tomcat
#→启动程序 /app/tomcat/bin/startup.sh
#→关闭程序 /app/tomcat/bin/shutdown.sh
[root@tomcat ~]# /app/tomcat/bin/startup.sh
Using CATALINA_BASE: /app/tomcat
Using CATALINA_HOME: /app/tomcat
Using CATALINA_TMPDIR: /app/tomcat/temp
Using JRE_HOME: /app/jdk
Using CLASSPATH:
/app/tomcat/bin/bootstrap.jar:/app/tomcat/bin/tomcat-juli.jar
Tomcat started.
[root@tomcat ~]# netstat -lnpt | grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1311/java
tcp6 0 0 :::8009 :::* LISTEN 1311/java
tcp6 0 0 :::8080 :::* LISTEN 1311/java
2.6 访问网站
http://ipaddr:8080/
2.7 日志介绍
[root@tomcat ~]# cd /app/tomcat/logs/
[root@tomcat logs]# ll
total 32
-rw-r--r-- 1 root root 12137 Sep 16 17:55 catalina.2018-09-16.log
-rw-r--r-- 1 root root 12137 Sep 16 17:55 catalina.out
-rw-r--r-- 1 root root 0 Sep 16 05:49 host-manager.2018-09-16.log
-rw-r--r-- 1 root root 560 Sep 16 17:54 localhost.2018-09-16.log
-rw-r--r-- 1 root root 824 Sep 16 18:02 localhost_access_log.2018-09-16.txt
-rw-r--r-- 1 root root 0 Sep 16 05:49 manager.2018-09-16.log
#-> catalina.out 实时日志
[root@tomcat logs]# tail -f catalina.out
16-Sep-2018 17:54:59.067 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /app/apache-tomcat-8.0.27/webapps/docs has finished in 160 ms
16-Sep-2018 17:54:59.067 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /app/apache-tomcat-8.0.27/webapps/examples
16-Sep-2018 17:55:00.002 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /app/apache-tomcat-8.0.27/webapps/examples has finished in 935 ms
16-Sep-2018 17:55:00.002 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /app/apache-tomcat-8.0.27/webapps/host-manager
16-Sep-2018 17:55:00.076 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /app/apache-tomcat-8.0.27/webapps/host-manager has finished in 73 ms
16-Sep-2018 17:55:00.076 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /app/apache-tomcat-8.0.27/webapps/manager
16-Sep-2018 17:55:00.095 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /app/apache-tomcat-8.0.27/webapps/manager has finished in 19 ms
16-Sep-2018 17:55:00.116 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
16-Sep-2018 17:55:00.194 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
16-Sep-2018 17:55:00.197 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 2440 ms
3. Tomcat 配置文件
3.1 Tomcat 配置文件
[root@tomcat conf]# pwd
/app/tomcat/conf
[root@tomcat conf]# ll -h
total 212K
drwxr-xr-x 3 root root 23 Sep 16 05:49 Catalina
-rw------- 1 root root 13K Sep 28 2015 catalina.policy
-rw------- 1 root root 7.0K Sep 28 2015 catalina.properties
-rw------- 1 root root 1.6K Sep 28 2015 context.xml
-rw------- 1 root root 3.4K Sep 28 2015 logging.properties
-rw------- 1 root root 6.4K Sep 28 2015 server.xml #主配置文件
-rw------- 1 root root 1.9K Sep 16 19:11 tomcat-users.xml #tomcat 管理用户配置文件
-rw------- 1 root root 1.9K Sep 28 2015 tomcat-users.xsd
-rw------- 1 root root 164K Sep 28 2015 web.xml
3.2 Tomcat 管理
测试功能,生产环境不推荐使用。
Tomcat 管理功能用于对 Tomcat 自身以及部署在 Tomcat 上的应用进行管理的 web 应用。在默认情况下是处于禁用状态的。如果需要开启这个功能,就需要配置管理用户,即配置前面说过的 tomcat-users.xml。
[root@tomcat ~]# vim /app/tomcat/conf/tomcat-users.xml
…………
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
</tomcat-users> #→在此行前加入上面三行
[root@tomcat ~]# /app/tomcat/bin/shutdown.sh
[root@tomcat ~]# /app/tomcat/bin/startup.sh
3.3 Tomcat 主配置文件 server.xml 详解
3.3.1 server.xml 组件类别
- 顶级组件:位于整个配置的顶层,如 server。
- 容器类组件:可以包含其它组件的组件,如 service、engine、host、context。
- 连接器组件:连接用户请求至 tomcat,如 connector。
- 被嵌套类组件:位于一个容器当中,不能包含其他组件,如 Valve、logger。
3.3.2 server.xml 组件详解
- engine:核心容器组件,catalina 引擎, 负责通过 connector 接收用户请求, 并处理请求, 将请求转至对应的虚拟主机 host。
- host:类似于 httpd 中的虚拟主机,一般而言支持基于 FQDN 的虚拟主机。
-context:定义一个应用程序,是一个最内层的容器类组件(不能再嵌套)。配置 context 的主要目的指定对应对的 webapp 的根目录,类似于 httpd 的 alias,其还能为 webapp 指定额外的属性,如部署方式等。
- connector:接收用户请求,类似于 httpd 的 listen 配置监听端口的。
- service(服务):将 connector 关联至 engine,因此一个 service 内部可以有多个 connector,但只能有一个引擎 engine。service 内部有两个 connector,一个 engine。因此,一般情况下一个 server 内部只有一个 service,一个 service 内部只有一个 engine,但一个 service 内部可以有多个 connector。
- server:表示一个运行于 JVM 中的 tomcat 实例。
- Valve:阀门,拦截请求并在将其转至对应的 webapp 前进行某种处理操作,可以用于任何容器中,比如记录日志 (access log valve)、基于 IP 做访问控制 (remote address filter valve)。
- logger:日志记录器,用于记录组件内部的状态信息,可以用于除 context 外的任何容器中。
- realm:可以用于任意容器类的组件中,关联一个用户认证库,实现认证和授权。可以关联的认证库有两种:UserDatabaseRealm、MemoryRealm 和 JDBCRealm。
- UserDatabaseRealm:使用 JNDI 自定义的用户认证库。
- MemoryRealm:认证信息定义在 tomcat-users.xml 中。
- JDBCRealm:认证信息定义在数据库中,并通过 JDBC 连接至数据库中查找认证用户。
3.3.3 配置文件 server.xml 主详解
<?xml version='1.0' encoding='utf-8'?>
#<Server> 元素代表整个容器, 是 Tomcat 实例的顶层元素. 由 org.apache.catalina.Server 接口来定义. 它包含一个 <Service> 元素. 并且它不能做为任何元素的子元素.
#
<Server port="8005" shutdown="SHUTDOWN">
#port 指定 Tomcat 监听 shutdown 命令端口. 终止服务器运行时, 必须在 Tomcat 服务器所在的机器上发出 shutdown 命令. 该属性是必须的.
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
#Service 服务组件
<Service name="Catalina">
#connector:接收用户请求,类似于 httpd 的 listen 配置监听端口。#port:指定服务器端要创建的端口号,并在这个端口监听来自客户端的请求。#address:指定连接器监听的地址,默认为所有地址(即 0.0.0.0)。#protocol:连接器使用的协议,支持 HTTP 和 AJP。AJP(Apache Jserv Protocol)专用于 tomcat 与 apache 建立通信的,在 httpd 反向代理用户请求至 tomcat 时使用(可见 Nginx 反向代理时不可用 AJP 协议)。#minProcessors:服务器启动时创建的处理请求的线程数。#maxProcessors:最大可以创建的处理请求的线程数。#enableLookups:如果为 true,则可以通过调用 request.getRemoteHost() 进行 DNS 查询来得到远程客户端的实际主机名,若为 false 则不进行 DNS 查询,而是返回其 ip 地址。#redirectPort:指定服务器正在处理 http 请求时收到了一个 SSL 传输请求后重定向的端口号。#acceptCount:指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。#connectionTimeout:指定超时的时间数 (以毫秒为单位)。<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
#Engine, 核心容器组件,catalina 引擎, 负责通过 connector 接收用户请求, 并处理请求, 将请求转至对应的虚拟主机 host。defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个 host 元素的 name 属性值是一样的。<Engine name="Catalina" defaultHost="localhost">
#Realm 表示存放用户名,密码及 role 的数据库
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
</Realm>
#Host, 表示存放用户名,密码及 role 的数据库。#name:指定主机名。#appBase:应用程序基本目录,即存放应用程序的目录. 一般为 appBase="webapps",相对于 CATALINA_HOME 而言的,也可以写绝对路径。#unpackWARs:如果为 true,则 tomcat 会自动将 WAR 文件解压,否则不解压,直接从 WAR 文件中运行应用程序。#autoDeploy:在 tomcat 启动时,是否自动部署。#xmlValidation:是否启动 xml 的校验功能,一般 xmlValidation="false"。#xmlNamespaceAware:检测名称空间,一般 xmlNamespaceAware="false"。<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
</Engine>
</Service>
</Server>