WEB应用服务器TOMCAT
知识点
一 、WEB技术
1、前端三大核心技术
1.1 HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h1>老李老李出门见喜</h1>
</body>
</html>
1.2CSS(Cascading Style Sheets)层叠样式表
HTML 本身为了格式化显示文本,但是当网页呈现大家面前的时候,需求 HTML 提供更多样式能力。这使得HTML 变得越来越臃肿。这促使了 CSS 的诞生。1994 年, W3C 成立, CSS 设计小组所有成员加入 W3C ,并努力研发 CSS 的标准,微软最终加入。1996 年 12 月发布 CSS 1.0 。1998 年 5 月发布 CSS 2.0CSS 3 采用了模块化思想,每个模块都在 CSS 2 基础上分别增强功能。所以,这些模块是陆续发布的。不同厂家的浏览器使用的引擎,对CSS 的支持不一样,导致网页布局、样式在不同浏览器不一样。因此,想要保证不同用户使用不同浏览器看到的网页效果一直非常困难。
1.3 JavaScript
二、WEB框架
1、web资源和访问

- 从静态服务器请求HTML、CSS、JS等文件发送到浏览器端,浏览器端接收后渲染在浏览器上从图片服务器请求图片资源显示
- 从业务服务器访问动态内容,动态内容是请求后有后台服务访问数据库后得到的,最终返回到浏览器端
2、后台应用架构
2.1单体架构

2.2 微服务
2.3 单体架构和微服务比较
- 每个服务足够内聚,足够小,代码容易理解。这样能聚焦一个只当的业务功能或业务需求。
- 开发简单、开发效率提高,一个服务可能就是专业的只干一件事,微服务能够被小团队单独开发,这个小团队可以是2到5人的开发人员组成
- 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
- 微服务能使用不同的语言开发
- 易于和第三方集成,微服务运行容易且灵活的方式集成自动部署,通过持续集成工具,如:
- Jenkins、Hudson、Bamboo
- 微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值
- 微服务允许你利用融合最新技术。微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合,即前后端分离
- 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库
- 微服务把原有的一个项目拆分成多个独立工程,增加了开发、测试、运维、监控等的复杂度
- 微服务架构需要保证不同服务之间的数据一致性,引入了分布式事务和异步补偿机制,为设计和开发带来一定挑战
- 开发人员和运维需要处理分布式系统的复杂性,需要更强的技术能力
- 微服务适用于复杂的大系统,对于小型应用使用微服务,进行盲目的拆分只会增加其维护和开发成本
- 阿里开源贡献给了ASF,目前已经是Apache的顶级项目
- 一款高性能的Java RPC服务框架,微服务生态体系中的一个重要组件
- 将单体程序分解成多个功能服务模块,模块间使用Dubbo框架提供的高性能RPC通信
- 内部协调使用Zookeeper,实现服务注册、服务发现和服务治理
- 一个完整的微服务解决方案,相当于Dubbo的超集
- 微服务框架,将单体应用拆分为粒度更小的单一功能服务
- 基于HTTP协议的REST(Representational State Transfer 表述性状态转移)风格实现模块间通信
三、tomcat的功能介绍
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小
型系统和并发访问用户不是很多的场合下被普遍使用,Tomcat 具有处理HTML页面的功能,它还
是一个Servlet和JSP容器
官网 :http://tomcat.apache.org/官网文档 :https://tomcat.apache.org/tomcat-8.5-doc/index.html帮助文档 :https://cwiki.apache.org/confluence/display/tomcat/https://cwiki.apache.org/confluence/display/tomcat/FAQ
1、安装tomcat
1.1安装java环境
[root@tomcat ~]# yum install java-1.8.0-openjdk.x86_64 -y
1.2安装并启动tomcat
[root@tomcat ~]# tar zxf apache-tomcat-9.0.91.tar.gz -C /usr/local/[root@tomcat ~]# ln -s /usr/local/apache-tomcat-9.0.91/ /usr/local/tomcat[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh
1.3查看端口
1.4访问tomcat

2、tomcat的文件结构和组成
2.1目录结构
2.2 查看tomcat相关目录和文件
3、生成tomcat的启动文件
3.1生成tomcat的主配置文件
[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat.confJAVA_HOME=/etc/alternatives/jre_openjdk
3.2生成启动文件
[root@tomcat ~]# useradd -s /sbin/nologin -M tomcat[root@tomcat ~]# chown -R tomcat.tomcat /usr/local/tomcat[root@tomcat ~]# vim /lib/systemd/system/tomcat.service[Unit]Description=Tomcat#After=syslog.target network.target remote-fs.target nss-lookup.targetAfter=syslog.target network.target[Service]Type=forkingEnvironmentFile=/usr/local/tomcat/conf/tomcat.confExecStart=/usr/local/tomcat/bin/startup.shExecStop=/usr/local/tomcat/bin/shutdown.shPrivateTmp=trueUser=tomcatGroup=tomcat[Install]WantedBy=multi-user.target
[root@tomcat ~]# systemctl daemon-reload[root@tomcat ~]# systemctl enable --now tomcat
四 、结合反向代理实现tomcat部署
1、 常见部署方式介绍

2 、利用 nginx 反向代理实现
- 利用nginx反向代理功能,实现图中的代理功能,将用户请求全部转发至指定的同一个tomcat主机
- 利用nginx指令proxy_pass 可以向后端服务器转发请求报文,并且在转发时会保留客户端的请求报文中的host首部
[root@Nginx ~]# vim /usr/local/nginx/conf.d/vhosts.conflocation ~ \.jsp$ {proxy_pass http://172.25.254.10:8080;}
3、实现tomcat中的负载均衡
3.1 HTTP的无状态,有连接和短连接
- 浏览器端第一次HTTP请求服务器端时,在服务器端使用session这种技术,就可以在服务器端 产生一个随机值即SessionID发给浏览器端,浏览器端收到后会保持这个SessionID在Cookie当 中,这个Cookie值一般不能持久存储,浏览器关闭就消失。浏览器在每一次提交HTTP请求的时候会把这个SessionID传给服务器端,服务器端就可以通过比对知道是谁了
- Session通常会保存在服务器端内存中,如果没有持久化,则易丢失
- Session会定时过期。过期后浏览器如果再访问,服务端发现没有此ID,将给浏览器端重新发 新的SessionID
更换浏览器也将重新获得新的 SessionID
有连接:是因为它基于TCP协议,是面向连接的,需要3次握手、4次断开。
服务器端如果故障,即使 Session 被持久化了,但是服务没有恢复前都不能使用这些 SessionID 。如果使用 HAProxy 或者 Nginx 等做负载均衡器,调度到了不同的 Tomcat 上,那么也会出现找不到SessionID的情况。
3.2 tomcat负载均衡实现
五、Memcached
1、 Memcached简介
2、memcached的安装与启动
[root@tomcat ~]# yum install memcached -y[root@tomcat ~]# vim /etc/sysconfig/memcachedPORT="11211"USER="memcached"MAXCONN="1024"CACHESIZE="64"OPTIONS="-l 0.0.0.0,::1"[root@tomcat ~]# systemctl enable --now memcached[root@tomcat ~]# netstat -antlupe | grep memcachetcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN980 97815 34711/memcached
3、memcached 操作命令
- set
- add
- replace
- get
- delete
# 参数说明如下:command set/add/replacekey key 用于查找缓存值flags 可以包括键值对的整型参数,客户机使用它存储关于键值对的额外信息expiration time 在缓存中保存键值对的时间长度(以秒为单位, 0 表示永远)bytes 在缓存中存储的字节数value 存储的值(始终位于第二行)# 增加 key ,过期时间为秒, bytes 为存储数据的字节数add key flags exptime bytes
六、session 共享服务器
1、 msm 介绍

2、安装
kryo-3.0.3.jarasm-5.2.jarobjenesis-2.6.jarreflectasm-1.11.9.jarminlog-1.3.1.jarkryo-serializers-0.45.jarmsm-kryo-serializer-2.3.2.jarmemcached-session-manager-tc9-2.3.2.jarspymemcached-2.12.3.jarmemcached-session-manager-2.3.2.jar
3、配置过程


实验部分
1、tomcat部署
[root@web10 ~]# hostnamectl hostname tomcat-node1.timinglee.org
[root@web20 ~]# hostnamectl hostname tomcat-node2.timinglee.org
安装java环境
[root@tomcat-node1 ~]# dnf install java-1.8.0-openjdk.x86_64 -y[root@tomcat-node1 ~]# ll /etc/alternatives/jre_openjdk/
总用量 184
-rw-r--r-- 1 root root 1522 1月 13 2024 ASSEMBLY_EXCEPTION
drwxr-xr-x 2 root root 188 8月 21 11:45 bin
drwxr-xr-x 9 root root 4096 8月 21 11:45 lib
-rw-r--r-- 1 root root 19274 1月 13 2024 LICENSE
-rw-r--r-- 1 root root 158253 1月 13 2024 THIRD_PARTY_README
安装并启动tomcat

查看端口
访问tomcat
生成tomcat的主配置文件
[root@tomcat-node1 conf]# vim tomcat.conf
生成启动文件
[root@tomcat-node1 conf]# vim /lib/systemd/system/tomcat.service
[root@tomcat-node1 conf]# useradd -s /sbin/nologin -M tomcat
[root@tomcat-node1 conf]# chown -R tomcat.tomcat /usr/local/tomcat/
[root@tomcat-node1 conf]# ls /usr/local/tomcat/ -ld
drwxr-xr-x 9 tomcat tomcat 220 8月 21 11:48 /usr/local/tomcat/
开启Tomcat
[root@tomcat-node1 conf]# systemctl daemon-reload
[root@tomcat-node1 conf]# systemctl enable --now tomcat
配置第二台主机
[root@tomcat-node2 ~]# ll /etc/alternatives/jre_openjdk/
总用量 184
-rw-r--r-- 1 root root 1522 1月 13 2024 ASSEMBLY_EXCEPTION
drwxr-xr-x 2 root root 188 8月 21 11:46 bin
drwxr-xr-x 9 root root 4096 8月 21 11:46 lib
-rw-r--r-- 1 root root 19274 1月 13 2024 LICENSE
-rw-r--r-- 1 root root 158253 1月 13 2024 THIRD_PARTY_README
[root@tomcat-node2 ~]# useradd -s /sbin/nologin -M tomact
[root@tomcat-node1 ~]# rsync -ar /usr/local/apache-tomcat-9.0.93 root@172.25.254.20:/usr/local/apache-tomcat-9.0.93
[root@tomcat-node1 ~]# rsync -ar /lib/systemd/system/tomcat.service root@172.25.254.20:/lib/systemd/system/tomcat.service
[root@tomcat-node2 local]# ln -s apache-tomcat-9.0.93 tomcat
[root@tomcat-node2 local]# chown -R tomcat.tomcat /usr/local/tomcat
[root@tomcat-node2 local]# ls /usr/local/tomcat/ -ld
drwxr-xr-x 9 tomcat tomcat 220 8月 21 12:21 /usr/local/tomcat/
[root@tomcat-node2 local]# systemctl daemon-reload
[root@tomcat-node2 local]# systemctl enable --now tomcat
2、反向代理
[root@tomcat-node1 ~]# ls
apache-tomcat-9.0.93.tar.gz test.jsp
[root@tomcat-node1 ~]# vim test.jsp
[root@tomcat-node1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@tomcat-node1 ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/
root@172.25.254.20's password:
test.jsp 100% 968 627.5KB/s 00:00
[root@nginx conf.d]# vim /usr/local/nginx/conf.d/vhosts.conf
[root@nginx conf.d]# nginx -s reload
负载均衡
[root@nginx conf.d]# vim /usr/local/nginx/conf.d/vhosts.conf
[root@nginx conf.d]# nginx -s reload
回话保持
[root@nginx conf.d]# vim /usr/local/nginx/conf.d/vhosts.conf
[root@nginx conf.d]# nginx -s reload
[root@nginx conf.d]# vim /usr/local/nginx/conf.d/vhosts.conf
[root@nginx conf.d]# nginx -s reload
3、session丢失
[root@tomcat-node1 ~]# dnf install memcached -y
[root@tomcat-node2 ~]# dnf install memcached -y
[root@tomcat-node1 ~]# vim /etc/sysconfig/memcached
[root@tomcat-node1 ~]# systemctl start memcached.service
[root@tomcat-node1 ~]# netstat -antlupe | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 979 145332 39085/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 979 145333 39085/memcached
[root@tomcat-node1 ~]# dnf install telnet -y
[root@tomcat-node1 conf]# systemctl restart tomcat.service
[root@tomcat-node2 conf]# systemctl restart tomcat.service
[root@tomcat-node1 conf]# systemctl stop tomcat.service
相关文章:

WEB应用服务器TOMCAT
知识点 一 、WEB技术 1、前端三大核心技术 1.1 HTML HTML ( HyperText Markup Language )超文本标记语言,它不同于一般的编程语言。超文本 即超出纯文本的范畴,例如:描述文本颜色、大小、字体等信息,或使…...
maven打包jar后运行提示“没有主清单属性”问题的几种解决方案
常用的几种maven项目打包后,jar运行提示“没有主清单属性”问题的解决方案,大部分都是要修改pom.xml文件,同时有几种自己常用的配置文件,主要供自用,勿喷。 第一种: <build><plugins><plug…...

计算机毕业设计选题推荐-民宿可视化分析-Python爬虫-随机森林算法
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...

WKWebView加载项目中网页的资源图片路径异常
问题原因,将含有html的文件通过如下方式引入到工程中: 这种处理方式,当应用程序变以后,引入的文件会被全部放在Resources目录下,而忽略你原本的文件路径信息。因此导致出问题。 解决方案: 采用如下方式引…...

算法全面剖析
算法 查找算法: 顺序查找: 基本思想: 顺序查找也称为线形查找,属于无序查找算法。从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相比较,若相等则表示查找成功&am…...

tp5php7.4配置sqlserver问题汇总
先修改database.php文件 查看php版本选择sqlserver扩展 通过百度网盘分享的文件:sqlserver 链接:https://pan.baidu.com/s/1zrIV8VWQZM9miLpyH01Aww?pwdxdgx 提取码:xdgx 通过我的分享链接复制自己需要的dll到php的ext下 在php.ini里添加扩…...
C语言随笔:字面量
字面量(Literal)是指程序源代码中直接写出的固定值。字面量用于表示数据常量,它们在程序编译时被直接解析并用于程序运行。 常见的字面量类型 整数字面量(Integer Literals) 描述:表示整数值。示例&#x…...

chainlit的基本概念聊天对话中的元素
文本消息是聊天机器人的组成部分,但我们通常希望向用户发送的不仅仅是文本,还包括图像、视频等。 这就是元素出现的地方。每个元素都是一段内容,可以附加到Message或Step 并显示在用户界面上。 chainlit支持的元素如下: 文本元…...
【LeetCode:3】无重复字符串的最长子串(Java)
题目链接 3. 无重复字符串的最长子串 题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: s “bbb…...
C#对字典使用Linq查询
Dictionary<int, int> dic new Dictionary<int, int>();dic.Add(1, 2);dic.Add(2, 3);dic.Add(3, 4);dic.Add(4, 5);dic.Add(5, 6);//筛选键var keys dic.Where(item > item.Key > 2).Select(item > item.Key);foreach (var item in keys){Console.Writ…...
【Vue】Vue基础
系列文章目录 第二章 Vue基础(1) 文章目录 系列文章目录第一节:Vue介绍一、Vue介绍二、Vue项目创建三、项目结构介绍 第二节:组合式API一、基本介绍二、setup介绍三、setup上指定组件名称 第三节:响应式变量一、使用r…...

贪心 + 分层图bfs,newcoder 76652/B
目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://ac.nowcoder.com/acm/contest/76652/B 二、解题报告 1、思路分析…...
如何在Linux上部署Java Web应用程序
在Linux上部署Java Web应用程序是一个常见的任务,本文将介绍一种常用的方法,分为以下几个步骤: 准备服务器 首先,你需要准备一台运行Linux操作系统的服务器。你可以选择使用各种不同的Linux发行版,如Ubuntu、CentOS等…...

SpringBoot 整合 Excel 轻松实现数据自由导入导出
01、背景介绍 在实际的业务系统开发过程中,操作 Excel 实现数据的导入导出基本上是个非常常见的需求。 之前,我们有介绍一款非常好用的工具:EasyPoi,有读者提出在数据量大的情况下,EasyPoi 会占用内存大,…...
PyTorch 基础学习(13)- 混合精度训练
系列文章: 《PyTorch 基础学习》文章索引 基本概念 混合精度训练是深度学习中一种优化技术,旨在通过结合高精度(torch.float32)和低精度(如 torch.float16 或 torch.bfloat16)数据类型的优势,…...

Mycat分片-垂直拆分
目录 场景 配置 测试 全局表配置 续接上篇:MySQ分库分表与MyCat安装配置-CSDN博客 续接下篇:Mycat分片-水平拆分-CSDN博客 场景 在业务系统中, 涉及以下表结构 ,但是由于用户与订单每天都会产生大量的数据, 单台服务器的数据 存储及处理能力是有限…...

一元四次方程求解-【附MATLAB代码】
目录 前言 求解方法 编辑 MATLAB验证 附:一元四次方程的故事 前言 最近在研究机器人的干涉(碰撞)检测,遇到了一个问题,就是在求椭圆到原点的最短距离时,构建的方程是一个一元四次方程。无论是高中的…...

【极限性能,尽在掌控】ROG NUC:游戏与创作的微型巨擘
初见ROG NUC,你或许会为它的小巧体型惊讶。然而,这看似不起眼的机身内,蕴藏着游戏、创意的强大能量。 掌中风暴,性能无界 ROG NUC搭载英特尔高性能处理器,配合高速NVMe SSD固态硬盘以及可选的高端独立显卡(…...

Ecosmos开启公测,将深度赋能CIOE中国光博会元宇宙参会新体验
如今,生成式AI技术的发展,极大地降低了3D数字资产的制作成本,元宇宙作为一种可以无缝将物理和数字资产进行融合的技术,在推动电子产业数字化进程、助力产业高质量发展的方面展现出了巨大的潜力。 当前,发展新质生产力是…...

【Kubernetes】k8s集群之包管理器Helm
目录 一.Helm概述 1.Helm的简介 2.Helm的三个重要概念 3.Helm2与Helm3的的区别 二.Helm 部署 1.安装 helm 2.使用 helm 安装 Chart 3.Helm 自定义模板 4.Helm 仓库 每个成功的软件平台都有一个优秀的打包系统,比如Debian、Ubuntu 的 apt,RedH…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...