Tomcat 部署

news2024/11/24 3:49:14

一.Tomcat介绍

  • Servlet 是 Java Servlet 的简称,可以理解为是一个服务连接器,是用 Java 编写的服务器端程序,具有独立于平台和协议的特性, 简单的理解:servlet 就是一个中间件,包含了接口和方法,将客户端和数据库连接,从而实现动态网页的创建
  • Tomcat 是 Java 语言开发的,Tomcat 服务器是一个免费的开放源代码的 Web 应用服务器,是 Apache 软件基金会的 Jakarta 项目中的一个核心项目,由 Apache、Sun 和其他一些公司及个人共同开发而成。
    Tomcat 属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。一般来说,Tomcat 虽然和 Apache 或者 Nginx 这些 Web 服务器一样,具有处理 HTML 页面的功能,然而由于其处理静态 HTML 的能力远不及 Apache 或者 Nginx,所以 Tomcat 通常是作为一个 Servlet 和 JSP 容器,单独运行在后端。
  • Tomcat 是 Web 应用服务器,也是一个 Servlet/JSP 容器。Tomcat 作为 Servlet 容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet 的响应传送回给客户

二.Tomcat核心的组件

  • Web 容器:完成 Web 服务器的功能
  • Servlet 容器:名字为 catalina,用于处理 Servlet 代码
  • JSP 容器:用于将 JSP 动态网页翻译成 Servlet 代码

三.Tomcat 功能组件结构

1.Connector:

  • 负责对外接收和响应请求。它是Tomcat与外界的交通枢纽,监听端口接收外界请求,并将请求处理后传递给容器做业务处理,最后将容器处理后的结果响应给外界

2.Container:

  • 负责对内处理业务逻辑。其内部由 Engine、Host、Context和Wrapper 四个容器组成,用于管理和调用 Servlet 相关逻辑

3.Service:

  • 对外提供的 Web 服务。主要包含 Connector 和 Container 两个核心组件,以及其他功能组件。Tomcat 可以管理多个 Service,且各 Service 之间相互独立

四.Container 结构分析

1.每个 Service 会包含一个 Container 容器。在 Container 内部包含了 4 个子容器

  • Engine:引擎,用来管理多个虚拟主机,一个 Service 最多只能有一个 Engine;
  • Host:代表一个虚拟主机,也可以叫站点,通过配置 Host 就可以添加站点;
  • Context:代表一个 Web 应用,包含多个 Servlet 封装器;
  • Wrapper:封装器,容器的最底层。每一 Wrapper 封装着一个 Servlet,负责对象实例的创建、执行和销毁功能

五.Tomcat 请求过程

  • 用户在浏览器中输入网址,请求被发送到本机端口 8080,被在那里监听的 Connector 获得
  • Connector 把该请求交给它所在的 Service 的 Engine(Container)来处理,并等待 Engine 的回应
  • 请求在 Engine、Host、Context 和 Wrapper 这四个容器之间层层调用,最后在 Servlet 中执行对应的业务逻辑、数据存储等
  • 执行完之后的请求响应在 Context、Host、Engine 容器之间层层返回,最后返回给 Connector,并通过 Connector 返回给客户端

六.实例

1.Tomcat 服务部署

① 关闭防火墙,将安装 Tomcat 所需软件包传到/opt目录下(jdk-8u201-linux-x64.rpm、apache-tomcat-9.0.16.tar.gz)

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

请添加图片描述

② 安装JDK

cd /opt
rpm -qpl jdk-8u201-linux-x64.rpm 
rpm -ivh jdk-8u201-linux-x64.rpm 
java -version

在这里插入图片描述

③ 设置JDK环境变量

vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version

在这里插入图片描述

在这里插入图片描述

④ 安装启动Tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
#后台启动tomcat
/usr/local/tomcat/bin/startup.sh  或  /usr/local/tomcat/bin/catalina.sh start

#前台启动tomcat(开启前台启动不支持进行操作)
/usr/local/tomcat/bin/catalina.sh run
netstat -natp | grep 8080

vim /usr/lib/systemd/system/tomcat.service

[Unit]
Description=tomcat server
Wants=network-online.target
After=network.target
[Service]
Type=forking
Environment="JAVA_HOME=/usr/java/jdk1.8.0_201-amd64"
Environment="PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
Environment="CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar"
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start tomcat
systemctl status tomcat
systemctl stop tomcat
systemctl status tomcat
  • 浏览器访问Tomcat的默认主页 http://192.168.247.133:8080

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

⑤ 优化tomcat启动速度

vim /usr/java/jdk1.8.0_201-amd64/jre/lib/security/java.security
--117行--修改    securerandom.source=file:/dev/urandom
/usr/local/tomcat/bin/shutdown.sh 
/usr/local/tomcat/bin/startup.sh

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.Tomcat 虚拟主机配置

① 创建 kgc 和 benet 项目目录和文件

mkdir /usr/local/tomcat/webapps/kgc
mkdir /usr/local/tomcat/webapps/benet
echo "This is kgc page\!" > /usr/local/tomcat/webapps/kgc/index.jsp
echo "This is benet page\!" > /usr/local/tomcat/webapps/benet/index.jsp

在这里插入图片描述

② 修改 Tomcat 主配置文件 server.xml

vim /usr/local/tomcat/conf/server.xml
--165行前--插入
<Host name="www.kgc.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/kgc" path="" reloadable="true" />
</Host>

<Host name="www.benet.com" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
	<Context docBase="/usr/local/tomcat/webapps/benet" path="" reloadable="true" />
</Host>

/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

③ 客户端浏览器访问验证

echo "192.168.247.133 www.kgc.com www.benet.com" >> /etc/hosts
  • 浏览器访问 http://www.kgc.com:8080/ 页面显示This is kgc page!
  • 浏览器访问 http://www.benet.com:8080/ 页面显示This is benet page!

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.Tomcat多实例部署

① 安装好 jdk

② 安装 tomcat

cd /opt
tar zxvf apache-tomcat-9.0.16.tar.gz
mkdir /usr/local/tomcat
mv apache-tomcat-9.0.16 /usr/local/tomcat/tomcat1
cp -a /usr/local/tomcat/tomcat1 /usr/local/tomcat/tomcat2

在这里插入图片描述

③ 配置 tomcat 环境变量

vim /etc/profile.d/tomcat.sh
#tomcat1
export CATALINA_HOME1=/usr/local/tomcat/tomcat1
export CATALINA_BASE1=/usr/local/tomcat/tomcat1
export TOMCAT_HOME1=/usr/local/tomcat/tomcat1

#tomcat2
export CATALINA_HOME2=/usr/local/tomcat/tomcat2
export CATALINA_BASE2=/usr/local/tomcat/tomcat2
export TOMCAT_HOME2=/usr/local/tomcat/tomcat2

source /etc/profile.d/tomcat.sh

在这里插入图片描述

在这里插入图片描述

④ 修改 tomcat2 中的 server.xml 文件,要求各 tomcat 实例配置不能有重复的端口号

vim /usr/local/tomcat/tomcat2/conf/server.xml
<Server port="8006" shutdown="SHUTDOWN">		#22行,修改Server prot,默认为8005 -> 修改为8006
<Connector port="8081" protocol="HTTP/1.1"		#69行,修改Connector port,HTTP/1.1  默认为8080 -> 修改为8081
<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />	#116行,修改Connector port AJP/1.3,默认为8009 -> 修改为8010

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

⑤ 修改各 tomcat 实例中的 startup.sh 和 shutdown.sh 文件,添加 tomcat 环境变量

vim /usr/local/tomcat/tomcat1/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
##添加以下内容
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat1/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE1
export CATALINA_HOME=$CATALINA_HOME1
export TOMCAT_HOME=$TOMCAT_HOME1


vim /usr/local/tomcat/tomcat2/bin/startup.sh 
# -----------------------------------------------------------------------------
# Start Script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2


vim /usr/local/tomcat/tomcat2/bin/shutdown.sh
# -----------------------------------------------------------------------------
# Stop script for the CATALINA Server
# -----------------------------------------------------------------------------
export CATALINA_BASE=$CATALINA_BASE2
export CATALINA_HOME=$CATALINA_HOME2
export TOMCAT_HOME=$TOMCAT_HOME2

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

⑥ 启动各 tomcat 中的 /bin/startup.sh

/usr/local/tomcat/tomcat1/bin/startup.sh 
/usr/local/tomcat/tomcat2/bin/startup.sh 
netstat -natp | grep java

在这里插入图片描述

⑦ 浏览器访问测试

http://192.168.247.133:8080
http://192.168.247.133:8081

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

5.2.6 地址解析协议ARP

5.2.6 地址解析协议ARP 我们知道要想实现全球范围内主机之间的通信&#xff0c;必须要有两个统一&#xff0c;一个是地址&#xff0c;另一个是数据格式&#xff0c;我们使用IP地址来实现统一的地址&#xff0c;使用IP分组实现统一的数据格式&#xff0c;在前面局域网的学习中我…

【AIGC】13、GLIP | 首次将 object detection 重建为 phrase grounding 任务

文章目录 一、背景二、方法2.1 将 object detection 和 phrase grounding 进行统一2.2 Language-aware deep fusion2.3 使用语义丰富的数据来进行预训练 三、效果3.1 迁移到现有 Benchmarks3.2 在 COCO 上进行零样本和有监督的迁移3.3 在 LVIS 上进行零样本迁移学习3.4 在 Flic…

android 如何分析应用的内存(四)

android 如何分析应用的内存&#xff08;四&#xff09; 接上文 在介绍细节部分时&#xff0c;先介绍了各种工具的使用&#xff0c;而这些工具&#xff0c;大部分都用来调试&#xff0c;诸如&#xff1a;特定内存点&#xff0c;堆栈&#xff0c;寄存器&#xff0c;变量值等的…

MySQL安装流程 及 8.0与5.7区别

一、MySQL版本介绍 1、MySQL 8.0 窗口函数&#xff1a;MySQL 8.0版本支持窗口函数&#xff0c;这是数据分析工作中非常常用的一类函数。窗口函数可以让用户在单个查询中跨多个行检索数据&#xff0c;并在查询结果中对数据执行计算。隐藏索引&#xff1a;在MySQL 8.0版本中&am…

C++STL详解 string【C++】

文章目录 函数模板函数模板的原理函数模板的实例化模板参数的匹配原则 类模板类模板的定义格式类模板的实例化 string 函数模板 函数模板的原理 template <typename T> //模板参数 ——类型 void Swap(T& x1, T& x2) {T tmp x1;x1 x2;x2 tmp; } int main()…

牛客网语法刷题篇(C语言) — 输出格式化

&#x1f929;本文作者&#xff1a;大家好&#xff0c;我是paperjie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 &#x1f970;内容专栏&#xff1a;这里是《C语言—语法篇》专栏&#xff0c;笔者用重金(时间和精力)打造&#xff0c;基础知识一网打尽&#xff0c;…

解析Linux中断子系统之中断映射

中断是当前计算机系统的基础功能&#xff0c;也是系统响应外设事件的必备桥梁。不同的架构对中断控制器有不同的设计理念&#xff0c;本文针对ARM公司提供的通用中断控制器&#xff08;GIC,Generic Interrupt Controller&#xff09;介绍在linux系统中的硬件中断号与软件中断号…

SpringBootWeb登录认证

1. 登录功能 1.1 需求 在登录界面中&#xff0c;我们可以输入用户的用户名以及密码&#xff0c;然后点击 “登录” 按钮就要请求服务器&#xff0c;服务端判断用户输入的用户名或者密码是否正确。如果正确&#xff0c;则返回成功结果&#xff0c;前端跳转至系统首页面。 1.2 …

简单聊一聊数据库驱动

数据库驱动通常是数据库厂家提供的&#xff0c;他们按照jdbc协议对自家数据库封装了一套可对外调用的API。在应用程序和数据库之间起到了桥接的作用。它是一个软件组件&#xff0c;提供了与特定数据库系统进行通信的接口和功能。 1. 数据库驱动的作用&#xff1a; 连接数据库&…

AAOS 音频动态路由

文章目录 基本概念车载音频配置文件外部的配置音频区的方式车载音频服务配置路由流程框架中获取可用输出设备配置例子测试方法相关问题 基本概念 Android 管理来自 Android 应用的声音&#xff0c;同时控制这些应用&#xff0c;并根据其声音类型将声音路由到 HAL 中的输出设备…

FastAPi上传文件报错,There was an error parsing the body

问题描述 通过postman调用fastapi编写的文件接口报错&#xff0c;如下图&#xff1a; {"detail": "There was an error parsing the body" } 问题的解决过程 postman本身的问题 postman有个work directory的概念&#xff0c;所以再使用postman上传的文…

Git常用命令submodule

Git常用命令submodule 1、需求 当程序比较大参与开发人员较多时&#xff0c;代码管理就复杂起来。代码如果全员可见&#xff0c;可以创建 share 分支维护共用代 码&#xff0c;可以创建 core 分支维护核心算法代码&#xff0c;各进程分别占一个分支&#xff0c;定期同步 sha…

如何从 OpenAI 迁移到 Azure OpenAI(保姆级教程,包含如何兼容 JS 语言版 LangChain)

Azure OpenAI 和 OpenAI 一样&#xff0c;本质都是调用 api&#xff0c;Azure OpenAI 的使用会稍微复杂一点&#xff0c;但好处就是方便付费。 创建 Azure OpenAI 资源 首先&#xff0c;先登录 Azure 账号&#xff1a;https://azure.microsoft.com/zh-cn/ 接着创建 OpenAI 资…

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时&#xff0c;电感电压等于输入电压 开关断开时&#xff0c;电感电压输出电压-输入电压&#xff0c; 电感的感生电动势&#xff0c;N ΔΦ磁通的变化率&#xff0c;Δt时间 假设开关闭合与开关断开&#xff0c;开关断开时能量全部释放光 将第三个式…

MySQL(进阶篇1.0)

MySQL体系结构 1、连接层 最上层是一些客户端和连接服务&#xff0c;包含本地sock通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关安全方案。在该层上引入了线程池的概念&#xff0c;为通过认证安全接入的客户端提…

进程的通信方式有哪些?

目录 管道消息队列共享内存信号量信号套接字 管道 最初我们在学习Linux基本命令使用的时候&#xff0c;我们经常通过多个命令的组合来完成我们的需求。比如说我们想知道如何查看进程或者端口是否在使用&#xff0c;会使用下面的这条命令 netstat nlp | grep xxx 这里的"|“…

电子科技大学计算机系统结构复习笔记(四):存储系统

目录 前言 重点一览 Cache基本原理 三种映像方式 物理地址与Cache地址的映射计算 Cache块标识 Cache替换算法 Cache写策略 分离cache与一体cache Cache性能与优化 Cache性能计算 Cache性能优化 主存储器与虚拟存储器 主存储器性能优化 虚拟存储器 虚拟存储器与…

编译 ONNX 模型

本篇文章译自英文文档 Compile ONNX Models — tvm 0.13.dev0 documentation 作者是 Joshua Z. Zhang 更多 TVM 中文文档可访问 →TVM 中文站。 本文将介绍如何用 Relay 部署 ONNX 模型。 首先安装 ONNX 包&#xff0c;最便捷的方法推荐安装 protobuf 编译器&#xff1a; pi…

【资料分享】浪涌电流(Inrush Current)产生原因

1、对Inrush Current电流的直观感受 当电灯在电路中工作时&#xff0c;如果突然启动马达或者变压器时&#xff0c;会出现电灯暗一下&#xff0c;此时电灯出现暗的情况就是因为马达或者变压器启动时&#xff0c;在电路中产生较大Inrush Current&#xff0c;具体分析可以参考下图…

图解HTTP书籍学习

了解Web及网络基础 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09; Web是建立在HTTP协议上通信的 把SGML&#xff08;Standard Generalized Markup Language&#xff0c;标准通用标记语言&#xff09; HTML&#xff08;HyperText Mar…