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
相关推荐
蓝染-惣右介7 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
.Ayang7 小时前
tomcat 后台部署 war 包 getshell
java·计算机网络·安全·web安全·网络安全·tomcat·网络攻击模型
lwprain9 小时前
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
mysql·docker·tomcat
_半夏曲9 小时前
node.js、nginx、iis、tomcat针对部署方面的简述
nginx·node.js·tomcat
Cod_Next1 天前
Mac系统下配置 Tomcat 运行环境
java·macos·tomcat
爬山算法2 天前
Tomcat(23)如何配置Tomcat的连接器以优化性能?
java·tomcat
The One Neo3 天前
tomcat顶层元素之<server>
java·tomcat
ZWZhangYu6 天前
【MyBatis源码】SqlSession执行Mapper过程
java·tomcat·mybatis
adwish6 天前
javaWeb小白项目--学生宿舍管理系统
java·tomcat·javaweb
sun_star1chen6 天前
Springboot3.3.5 启动流程之 tomcat启动流程介绍
java·spring boot·tomcat·springboot