Tomcat 简介安装

目录

1、概念介绍

Tomcat 组件

HTTP 请求过程

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 containerJAVA_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.shstart(){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" instart)start;;stop)stop;;restart)stopsleep 5start;;*)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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/643262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全双工通信协议:WebSocket

全双工通信协议&#xff1a;WebSockets 前言何时使用WebSocketsWebSocket APITextWebSocketHandlerWebSocketConfigurerWebSocket握手配置服务器允许的来源心跳包Java WebSocket API案例一&#xff1a;前端发送消息并接收后端响应案例二&#xff1a;模拟后端向前端推送消息案例…

Shell 虚拟机基线配置脚本示例

这是一个配置虚拟机基线的示例&#xff0c;包含关闭防火墙、禁用SElinux、设置时区、安装基础软件等。 这只是一个简单的模板&#xff0c;基线配置方面有很多&#xff0c;后续可以按照这个模板去逐步添加 代码示例 [rootbogon ~]# cat bastic.sh #!/bin/bashRED\E[1;31m GRE…

【C++】C++入门(一)

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. C关键字3. 命名空间3.1 命名空间定义3.2 命名空间的使用 4. C输入&输出 1. 前言 C是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0…

【产品交互】超全面B端设计规范总结

不知不觉已经深耕在B端这个领域3年有余&#xff0c;很多人接触过B端后会觉得乏味&#xff0c;因为B端的设计在视觉上并没有C端那么有冲击力&#xff0c;更多的是结合业务逻辑&#xff0c;设计出符合业务需求的交互&#xff0c;以及界面排版的合理性&#xff0c;达到产品的可用性…

助力工业焊缝质量检测,YOLOv7【tiny/l/x】不同系列参数模型开发构建工业焊接场景下工件表面焊接缺陷检测识别分析系统

焊接是一个不陌生但是对于开发来说相对小众的场景&#xff0c;在工件表面焊接场景下常常有对工件表面缺陷智能自动化检测识别的需求&#xff0c;工业AI结合落地是一个比较有潜力的场景&#xff0c;在我们前面的博文开发实践中也有一些相关的实践&#xff0c;感兴趣的话可以自行…

菜鸡后端的前端学习记录

前言 记录一下看视频学习前端的的一些笔记&#xff0c;以前对Html、Js、CSS有一定的基础&#xff08;都认得&#xff0c;没用过&#xff09;&#xff0c;现在不想从头再来了&#xff0c;学学Vue框架&#xff0c;不定时更新&#xff0c;指不定什么时候就鸽了。。。。 Vue2 01…

SQL Server多数据表之间的数据查询和分组查询

文章目录 一、多数据表之间的数据查询1.1内连接查询&#xff08;Inner join&#xff09;1.2 左外连接 (LEFT JOIN):1.3右外连接 (RIGHT JOIN):1.4. 全外连接 (FULL OUTER JOIN):1.5 交叉连接 (CROSS JOIN):1.6 自连接 (SELF JOIN):1.7 子查询: 二、分组查询2.1 分组查询2.2 查询…

静态分析C语言生成函数调用关系的利器——cflow(二)

大纲 环境准备选择项目分析代码简单分析高级分析坑&#xff1a;不能显示main函数所有调用函数的调用栈坑2&#xff1a;重定义错误坑3&#xff1a;缺失编译时产生的文件坑4&#xff1a;缺失工程的头文件包含路径指定坑5&#xff1a;操作系统的坑只存在于windows操作系统上的文件…

rabbitmq基础-java-1、快速入门

1、AMQP AMQP&#xff0c;即Advanced Message Queuing Protocol&#xff08;高级消息队列协议&#xff09;&#xff0c;一个提供统一消息服务的应用层标准高级消息队列协议&#xff0c;是应用层协议的一个开放标准&#xff0c;为面向消息的中间件设计&#xff0c;基于此协议的客…

Parallels Desktop 19 mac 虚拟机软件 兼容M1 M2

Parallels Desktop 19 for Mac 是一款适用于 macOS 的虚拟机软件。无需重启即可在 Mac 上运行 Windows、Linux 等系统&#xff0c;具有速度快、操作简单且功能强大的优点。包括 30 余种实用工具&#xff0c;可简化 Mac 和 Windows 上的日常任务。 软件下载&#xff1a;Parallel…

Linux目录结构:深入理解与命令创建指南

目录 摘要&#xff1a; 一.linux目录介绍 1.目录结果设置标准 2.目录结构介绍 二.linux命令 1.常见命令 # 与 $ 提示的区别 ifconfig查看ip地址 su 命令格式 cd 目录查看 查看文件内容 创建目录及文件 复制和移动 tar find chmod 2. vim一般使用 摘要&#xff1a; 前…

基于中文垃圾短信数据集的经典文本分类算法实现

垃圾短信的泛滥给人们的日常生活带来了严重干扰&#xff0c;其中诈骗短信更是威胁到人们的信息与财产安全。因此&#xff0c;研究如何构建一种自动拦截过滤垃圾短信的机制有较强的实际应用价值。本文基于中文垃圾短信数据集&#xff0c;分别对比了朴素贝叶斯、逻辑回归、随机森…

CentOS使用

1.使用SSH连接操作虚拟机中的CentOS 1.1 配置静态IP 想要使用ssh连接就需要获取虚拟机的IP&#xff0c;但若DHCP&#xff0c;则每次连接都要确定虚拟机的IP是否变化&#xff0c;故直接分配一个静态IP vmware中&#xff0c;编辑–虚拟网络编辑器&#xff0c;记住下方的子网掩…

windows和linux下SHA1,MD5,SHA256校验办法

今天更新android studio到Android Studio Hedgehog | 2023.1.1时&#xff0c;发现提示本机安装的git版本太老&#xff0c;于是从git官网下载最新的git。 git下载地址&#xff1a; https://git-scm.com/ 从官网点击下载最新windows版本会跳转到github仓库来下载发布的git&…

【趣味CSS3.0】粘性定位属性Position:sticky是不是真的没用了?

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起学习和进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&a…

sublime text 开启vim模式

sublime text 开启vim模式 打开配置文件 mac下点击菜单栏 Sublime Text -> Settings... -> Settings 修改配置文件并保存 添加配置 // 开启vim模式 "ignored_packages": [// "Vintage", ], // 以命令模式打开文件 "vintage_start_in_comman…

视频监控平台EasyCVR增加fMP4流媒体视频格式及其应用场景介绍

近期我们在视频监控管理平台EasyCVR系统中新增了HTTP-FMP4播放协议&#xff0c;今天我们就来聊聊该协议的特点和应用。 fMP4&#xff08;Fragmented MPEG-4&#xff09;是基于MPEG-4 Part 12的流媒体格式&#xff0c;是流媒体的一项重要技术&#xff0c;因为它能通过互联网传送…

【GitHub项目推荐--12 年历史的 PDF 工具开源了】【转载】

最近在整理 PDF 的时候&#xff0c;有一些需求普通的 PDF 编辑器没办法满足&#xff0c;比如 PDF 批量合并、编辑等。 于是&#xff0c;我就去 GitHub 上看一看有没有现成的轮子&#xff0c;发现了这个 PDF 神器「PDF 补丁丁」&#xff0c;让人惊讶的是这个 PDF 神器有 12 年的…

RabbitMQ进阶篇【理解➕应用】

&#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于RabbitMQ的相关操作吧 目录 &#x1f973;&#x1f973;Welcome 的Huihuis Code World ! !&#x1f973;&#x1f973; 一.什么是交换机 1.概念释义 2.例…

【数据分析】matplotlib、numpy、pandas速通

教程链接&#xff1a;【python教程】数据分析——numpy、pandas、matplotlib 资料&#xff1a;https://github.com/TheisTrue/DataAnalysis 1 matplotlib 官网链接&#xff1a;可查询各种图的使用及代码 对比常用统计图 1.1 折线图 &#xff08;1&#xff09;引入 from …