Tomcat 简介安装

目录

1、概念介绍

[Tomcat 组件](#Tomcat 组件)

[HTTP 请求过程](#HTTP 请求过程)

[Tomcat 目录结构](#Tomcat 目录结构)

[Tomcat 命令](#Tomcat 命令)

配置文件说明

2、安装环境

安装JDK

安装Tomcat

创建管理用户

3、搭建虚拟主机


1、概念介绍

端口:8080

Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器, 按照 Sun 提供的技术规范,实现了对 Servlet 和 Java Server Page(JSP)的支持。使用 HTTP 协议与客户端(通常是浏览器)进行通信。Tomcat 是一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选,因为 Tomcat 技术先进、性能稳定,成为目前比较流行的 Web 应用服务器。Tomcat 是应用(java)服务器,它只是一个 servlet 容器,是 Apache 的扩展,但它是独立运行的。由于 Tomcat 本身也内含了一个 HTTP 服务器,它也可以被视作一个单独的 Web 服务器。

Tomcat 和 apache、nginx 等 Web 服务器一样,具有处理 HTML 页面的功能。不过,Tomcat 处理静态 HTML 的能力不如 Apache 和 nginx 服务器。

Web serever 只能完成静态资源的请求;Servlet 容器能够进行动态资源的请求;

Servlet

Servlet(Server Applet)是 Java Servlet 的简称,称为小服务程序或服务连接器,用 Java 编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web 内容。

Servlet 架构,在软件里面位置如下:

1、客户端发送请求至服务器端;

2、服务器将请求信息发送至 Servlet;

3、Servlet 生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求;

4、服务器将响应返回给客户端。

Tomcat 组件

Tomcat 主要组件:服务器 Server,服务 Service,连接器 Connector、容器 Container。连接器 Connector 和容器 Container 是 Tomcat 的核心。

|-----------|---------------------------------------------------------------|
| Tomcat 组件 | 说明 |
| Server | Tomcat 中最顶层的容器是 ,代表着整个服务器,一个Server 可以包含至少一个 Service,用于具体提供服务。 |
| Connector | 用于处理连接相关的事情,并提供 Socket 与 Request 和 Response 相关的转化; |
| Container | 用于封装和管理 Servlet,以及具体处理 Request 请求。 |

Tomcat 还有其它重要的组件,如安全组件 security、logger 日志组件、session、 mbeans、naming 等其它组件。这些组件共同为 Connector 和 Container 提供必要的服务。

Connector

一个 Connecter 将在某个指定的端口上侦听客户请求,接收浏览器发过来的tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据, 然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理 Engine(Container 中的一部分),从 Engine 出获得响应并返回客户。 一个服务可以有多个连接,如同时提供 Http 和 Https 链接,也可以提供向相同协议不同端口的连接

Tomcat 中有两个经典的 Connector,一个直接侦听来自 Browser 的 HTTP 请求,另外一个来自其他的 WebServer 请求。HTTP/1.1 Connector 在端口 8080 处侦听来自客户 Browser 的 HTTP 请求,AJP/1.3 Connector 在端口 8009 处侦听其他 Web Server 的 Servlet/JSP 请求。

http 协议访问端(默认为 8080),负责建立 HTTP 连接。在通过浏览器访问 Tomcat服务器的 Web 应用时,使用的就是这个连接器。

AJP 协议访问端口(默认为 8009 端口),负责和其他的 HTTP 服务器建立连接。在把 Tomcat 与其他 HTTP 服务器集成时,就需要用到这个连接器。


Container

Container 用于封装和管理 Servlet,以及具体处理 Request 请求,在 Container 内部包含了 4 个子容器

Engine:引擎,用来管理多个站点,一个 Service 最多只能有一个 Engine;

Engine 用来接收并处理从 Connector 发来的请求,并将处理结果返回 Connector。 一个 Engine 可以包含一个或多个 Host。

Engine 下可以配置多个虚拟主机 Virtual Host,每个虚拟主机都有一个域名,当Engine 获得一个请求时,它把该请求匹配到某个 Host 上,然后把该请求交给该 Host 来处理。Engine 有一个默认虚拟主机,当请求无法匹配到任何一个 Host 上的时候,将交给该默认 Host 来处理。


Host:代表一个 Virtual Host,虚拟主机。

每个虚拟主机和某个网络域名 Domain Name 相匹配,每个虚拟主机下都可以部署一个或者多个 Web App,每个 Web App 对应于一个 Context,有一个 Context path。

当 Host 获得一个请求时,将把该请求匹配到某个 Context 上,然后把该请求交给该 Context 来处理。匹配的方法是"最长匹配",所以一个 path=""的 Context 将成为该 Host 的默认 Context,所有无法和其它 Context 的路径名匹配的请求都将最终和该默认 Context 匹配。


Context:一个 Context 对应于一个 Web Application。

一个 Web Application 由 一 个 或 者 多 个 Servlet 组 成 。 Context 在 创 建 的 时 候 将 根 据 配 置 文 件 $CATALINA_HOME/conf/web.xml$WEBAPP_HOME/WEB-INF/web.xml 载入 Servlet 类,当 Context 获得请求时,将在自己的映射表(mapping table)中寻找相匹配的 Servlet 类,如果找到,则执行该类,获得请求的回应,并返回。


Wrapper:每一 Wrapper 封装着一个 Servlet。

Wrapper 代表一个 Servlet,它负责管理一个 Servlet,包括的 Servlet 的装载、初始化、执行以及资源回收。Wrapper 是最底层的容器,它没有子容器了。

HTTP 请求过程

Tomcat Server 处理一个 HTTP 请求的过程

用户点击网页内容,请求被发送到本机端口 8080,被在那里监听的 Coyote HTTP/1.1 Connector 获得。

Connector 把该请求交给它所在的 Service 的 Engine 来处理,并等待 Engine 的回应。

Engine 获得请求 localhost/test/index.jsp,匹配所有的虚拟主机 Host。

Engine 匹配到名为 localhost 的 Host(即使匹配不到也把请求交给该 Host 处理,因为该 Host 被定义为该 Engine 的默认主机),名为 localhost 的 Host 获得请求/test/index.jsp,匹配它所拥有的所有的 Context。Host 匹配到路径为/test 的 Context (如果匹配不到就把该请求交给路径名为 path=""的 Context 去处理)

path="/test"的 Context 获得请求/index.jsp,在它的 mapping table 中寻找出对应的 Servlet。Context 匹配到 URL PATTERN 为*.jsp 的 Servlet,对应于 JspServlet 类。

构造 HttpServletRequest 对象和 HttpServletResponse 对象,作为参数调用JspServlet 的 doGet()或 doPost().执行业务逻辑、数据存储等程序。

Context 把执行完之后的 HttpServletResponse 对象返回给 Host。

Host 把 HttpServletResponse 对象返回给 Engine。

Engine 把 HttpServletResponse 对象返回 Connector。

Connector 把 HttpServletResponse 对象返回给客户 Browser。

Tomcat 目录结构
复制代码
|---bin:存放启动和关闭 tomcat 执行脚本;
|---conf :存放 Tomcat 服务器的各种全局配置文件,其中最重要的是server.xml 和 web.xml;
|---lib: 存放 Tomcat 运行需要的库文件(jar),包含 Tomcat 使用的 jar 文件。unix 平台此目录下的任何文件都被加到 Tomcat 的 classpath 中;
|---logs:存放 Tomcat 执行时的 LOG 文件;
|---webapps:Tomcat 的主要 Web 发布目录,默认情况下把 Web 应用文件放于此目录,即供外界访问的 web 资源的存放目录;
|--- webapps/ROOT:tomcat 的家目录
|--- webapps/ROOT/ index.jsp:Tomcat 的默认首页文件
|---work:存放 jsp 编译后产生的 class 文件或 servlet 文件存放
|---temp:存放 Tomcat 运行时所产生的临时文件
Tomcat 命令

bat 为 windows 下的脚本(批处理) ;sh 为 Linux 下的脚本,Shell

catalina.sh一个最关键的脚本,其他的启动脚本如 startup,shutdown.sh,都是使用了不同的参数调用了该脚本,startup 以 start 参数调用了 catalina 脚本, shutdown 使用 stop 调用了 catalina 脚本!

配置文件说明
复制代码
server.xml文件:该文件用于配置和server相关的信息,比如tomcat启动的端口号、
配置 host 主机、配置 Context 

web.xml 文件:部署描述文件,web.xml 文件有两部分:Servlet 类定义和 Servlet 映射定义。
这个 web.xml 中描述了一些默认的 servlet,部署每个 webapp 时,都会调用这个文件。
这个文件中也注册了很多 MIME 类型,即文档类型。这些 MIME 类型是客户端与
服务器之间说明文档类型的,如用户请求一个 html 网页,那么服务器会告诉客户
端浏览器响应的文档是 text/html 类型的,这就是一个 MIME 类型。客户端浏览器
通过这个 MIME 类型就知道如何处理它了。当然是在浏览器中显示这个 html 文件
了。但如果服务器响应的是一个 exe 文件,那么浏览器就不可能显示它,而是应该
弹出下载窗口才对。MIME 就是用来说明文档的内容是什么类型的!

tomcat-users.xml 文件:配置 tomcat 的用户密码与权限。

context.xml:每个 webapp 都可以使用的配置文件,它通常由专用的配置文件
context.xml 来定义,其存放位置为 WEB-INF/目录中;此文件为所有的 webapps 提
供默认配置;例如 context.xml 里设置 tomcat 数据源,用来连接数据库。

catalina.policy:当使用-security 选项启动 tomcat 时,用于为 tomcat 设置安全策略;
catalina.properties:Java 属性的定义文件,用于设定类加载器路径,以及一些与JVM 调优相关参数;
logging.properties:日志系统相关的配置;
2、安装环境

① 下载Tomcat:Apache Tomcat® - Apache Tomcat 8 Software Downloads

② 下载mysql-connector-java:https://dev.mysql.com/downloads/

③ 下载JDK:技术资源 | Oracle 中国

安装JDK
复制代码
# 解压 jdk 
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

#  配置 JDK 环境变量 
vim /etc/profile # 在文件最后加入一下行
JAVA_HOME=/usr/local/jdk1.8.0_171 
PATH=$JAVA_HOME/bin:$PATH 
CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
export PATH JAVA_HOME CLASSPATH 
# 使环境变量生效
source /etc/profile 
安装Tomcat
复制代码
# 解压软件包 
tar -zxvf apache-tomcat-8.5.42.tar.gz -C /usr/local/
# 更改目录名称
mv /usr/local/apache-tomcat-8.5.98/ /usr/local/tomcat

注意:Tomcat 有两种安装方式,一种是直接解压就可以使用的二进制文件,第二种是编译安装,我们这里采用了第一种方法,下载的 tomcat 软件直接解压就可以执行的二进制文件,因为在官方默认下载的便是使用第一种方法安装。

Tomcat 服务启动脚本

复制代码
#!/bin/bash
# description:The Apache Tomcat Server/JSP container

JAVA_HOME=/usr/local/jdk1.8.0_171
CATALINA_HOME=/usr/local/tomcat

# tomcat start file
start_tomcat=$CATALINA_HOME/bin/startup.sh
# tomcat stop file
stop_tomcat=$CATALINA_HOME/bin/shutdown.sh

start(){
	echo -n "Starting tomcat..."
	${start_tomcat}
}

stop(){
	echo -n "Shutting down tomcat..."
	${stop_tomcat}
	echo "Tomcat stop ok."
}

# See how we were called
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		stop
		sleep 5
		start
		;;
	*)
		echo "Usage:$0{start|stop|restart}"
esac

# 启动脚本添加执行权限 
chmod +x /etc/init.d/tomcat

Tomcat 系统服务文件

复制代码
vim /lib/systemd/system/tomcat.service

[Unit]
Description=tomcat
After=network.target

[Service]
Type=forking
Environment=JAVA_HOME=/usr/local/jdk1.8.0_171
Environment=CATALINA_HOME=/usr/local/tomcat
ExecStart=/usr/local/tomcat/bin/startup.sh start
ExecStop=/usr/local/tomcat/bin/shutdown.sh stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

# 重载 service 文件
systemctl daemon-reload 

# 启动 tomcat 
systemctl start tomcat 

# 添加开机自启动 
systemctl enable tomcat 
 
ps -ef | grep tomcat
创建管理用户
复制代码
# 修改 tomcat-users.xml 配置文件 
vim /usr/local/tomcat/conf/tomcat-users.xml

<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
	<role rolename="admin-gui"/> 
	<role rolename="admin-script"/> 
	<role rolename="manager-gui"/> 
	<role rolename="manager-script"/> 
	<role rolename="manager-jmx"/> 
	<role rolename="manager-status"/> 
	<user username="admin" password="123456" 
	roles="manager-gui,manager-script,manager-jmx,manager-status,admin-script,admin-gui"/>
</tomcat-users>

|----------------|---------------------------------------------|
| 角色 | 说明 |
| manager-gui | Allows access to the html interface |
| manager-script | Allows access to the plain text interface |
| manager-jmx | Allows access to the JMX proxy interface |
| manager-status | Allows access to the read-only status pages |
| admin-gui | 允许访问 HTML GUI |
| admin-script | 允许访问文本接口 |

tomcat8 以上还要增加以下配置

复制代码
 vim /usr/local/tomcat/conf/Catalina/localhost/manager.xml
 <Context privileged="true" antiResourceLocking="false" 
 docBase="${catalina.home}/webapps/manager"> 
 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
 </Context>


vim /usr/local/tomcat/webapps/host-manager/META-INF/context.xml
<Context antiResourceLocking="false" privileged="true" > 
<Valve className="org.apache.catalina.valves.RemoteAddrValve" 
allow="^.*$" />

重启服务重新点击Manager App -> 输入admin 123456

3、搭建虚拟主机

搭建基于域名的虚拟主机:server.xml 是 Tomcat 的主配置文件(全局),服务器设置的,例如端口设置,路径设置。

复制代码
# 修改 server.xml 配置文件 
vim /usr/local/tomcat/conf/server.xml

# 在engine标签里添加
<Host name="www.test.com" appBase="/www/html"> 
	<Context path="" docBase="/www/html/web1" /> 
</Host> 
<Host name="www.test.cn" appBase="/www/html"> 
	<Context path="" docBase="/www/html/web2" /> 
</Host>

|------------------------|----------------------------------------------------------------------|
| Host 元素|子标签 | 说明 |
| name | 指定虚拟主机的名称,那么使用对应的 ip 将无法访问,如果需要使用 ip 来访问,需要把 host 的 name 属性改成 ip 即可。 |
| appBase | 指定应用程序(网站)的根目录,这里可以存放多个程序(网站),一般是相对路径,相对于 tomcat 的安装目录。 |
| <Context path=""> | 为虚拟目录,如果是空,表示直接就是/,如果是如 path="aa",那么访问的时候就是 site:8080/aa |
| <Context docBase=""> | 为实际目录,可以是绝对路径,如果是相对路径就是基于appBase |

复制代码
# 创建测试网页 
mkdir -p /www/html/{web1,web2} 
echo "test.com web1" > /www/html/web1/index.html 
echo "test.cn web2" > /www/html/web2/index.html 

# 修改 hosts 
vim /etc/hosts
192.168.1.11 www.test.com 
192.168.1.11 www.test.cn

# windows 客户端修改 hosts 
C:\Windows\System32\drivers\etc 
192.168.1.11 www.test.com 
192.168.1.11 www.test.cn

# 重启 tomcat 
systemctl restart tomcat
相关推荐
WannaRunning1 小时前
浅谈Tomcat数据源连接池
java·oracle·tomcat
兢兢业业的小白鼠17 小时前
Java高级JVM知识点记录,内存结构,垃圾回收,类文件结构,类加载器
java·开发语言·jvm·tomcat
chushiyunen18 小时前
tomcat使用笔记、启动失败但是未打印日志
java·笔记·tomcat
杉之20 小时前
SpringBlade 数据库字段的自动填充
java·笔记·学习·spring·tomcat
心灵宝贝1 天前
Tomcat 部署 Jenkins.war 详细教程(含常见问题解决)
java·tomcat·jenkins
生命是有光的1 天前
【中间件安全计划】锚定Tomcat安全基线
安全·中间件·tomcat
qq_431510161 天前
tomcat组件概览
java·tomcat
ccc_9wy2 天前
玄机-第六章 流量特征分析-常见攻击事件 tomcat的测试报告
网络安全·tomcat·玄机靶场·攻击流程·溯源分析·定时任务反弹shell·gobuster
当归10242 天前
Tomcat中的webapps的访问方式和java -jar内置Tomcat的访问方式的区别
java·tomcat·jar
magic 2452 天前
监听器(Listener)详解
java·servlet·tomcat