WEB应用服务器TOMCAT
一 WEB技术
HTTP协议
HTTP 是用于在网络上(主要是万维网)传输超文本(如 HTML、图片、视频等)的应用层协议,规定了客户端和服务器之间如何通信、数据如何格式化和传输等规则。
核心特点
- 无状态:服务器不会记忆客户端的历史请求,每次请求都是独立的。这意味着如果需要保持用户登录状态等,需要通过 Cookie、Session 等技术额外实现。
- 请求 - 响应模式:通信由客户端发起请求,服务器接收后处理并返回响应,服务器不会主动向客户端发送数据。
- 基于 TCP 协议:HTTP 依赖 TCP 的可靠传输特性(如数据不丢失、按顺序到达),但 HTTP 本身不处理传输层细节。
- 可扩展:通过请求头、响应头的字段扩展功能(如缓存控制、跨域资源共享 CORS 等)。
基本工作流程
- 客户端(如浏览器)向服务器发起 HTTP 请求(包含请求方法、URL、请求头、请求体等);
- 服务器接收请求,处理后生成 HTTP 响应(包含状态码、响应头、响应体等);
- 客户端接收响应并解析(如浏览器渲染 HTML、显示图片等)。
B/S 结构
B/S 结构是一种软件架构模式,指客户端通过浏览器访问服务器端的应用程序,所有业务逻辑和数据存储都集中在服务器端,客户端仅需安装浏览器即可使用。
核心组成
- 客户端:仅需浏览器(如 Chrome、Firefox),无需安装专门的客户端软件,通过 HTTP 协议与服务器通信。
- 服务器端:包含 Web 服务器(如 Nginx、Apache,负责处理 HTTP 请求)、应用服务器(如 Tomcat、Node.js,负责运行业务逻辑)和数据库(如 MySQL、MongoDB,负责存储数据)。
优势
- 跨平台性:客户端只需浏览器,兼容 Windows、macOS、Linux 等不同操作系统,无需针对不同平台开发多个客户端。
- 易于维护:所有更新和维护都在服务器端完成,用户无需手动升级客户端(刷新浏览器即可获取最新版本)。
- 部署简单:只需部署服务器端,客户端零部署成本。
- 访问灵活:只要有网络和浏览器,即可通过 URL 访问应用(如网页版邮箱、在线文档等)。
前端三大核心技术
HTML-超文本标记语言
HTML 是用于描述网页结构的标记语言,它通过一系列标签(Tags)定义网页中的内容(如文字、图片、链接、表单等)及其语义,是网页的 “骨架”。
核心特点
- 标记语言:使用
包裹内容,标签通常成对出现(如
)需自闭合。 - 语义化:标签本身具有含义,例如
表示一级标题,
- 嵌套结构:标签可以嵌套形成层级关系,如同 “父子”“兄弟”,构成网页的树形结构(DOM 树)。
CSS-层叠样式表
CSS 是用于控制网页样式和布局的语言,它可以对 HTML 元素进行美化(如颜色、字体、间距)和排版(如位置、大小、布局方式),让网页从 “骨架” 变成 “有颜值” 的页面。
核心特点
- 层叠性:多个样式规则可以作用于同一元素,优先级高的规则会覆盖优先级低的规则(优先级由选择器权重、声明位置等决定)。
- 继承性:子元素会继承父元素的部分样式(如字体、颜色),减少重复代码。
- 选择器:通过选择器定位 HTML 元素并应用样式,例如标签选择器(
p { ... }
)、类选择器(.class { ... }
)、ID 选择器(#id { ... }
)、后代选择器(div p { ... }
)等。 - 布局能力:支持多种布局方式,如传统的浮动(float)、定位(position),以及现代的 Flexbox(弹性盒)、Grid(网格),可实现复杂的页面布局。
JavaScript
JavaScript 是用于实现网页交互逻辑的编程语言,它可以动态修改网页内容、响应用户操作(如点击、输入)、处理数据,让网页从 “静态展示” 变为 “动态交互”。
核心特点
- 解释型语言:无需编译,直接由浏览器解析执行。
- 弱类型语言:变量类型可动态变化(如
let a = 1; a = \"hello\";
是允许的)。 - 基于对象和事件驱动:通过操作 DOM(文档对象模型)和 BOM(浏览器对象模型)与网页交互,响应用户触发的事件(如
click
、input
)。 - 异步编程:支持回调函数、Promise、async/await 等异步方式,处理网络请求(如 AJAX)、定时器等耗时操作,避免页面卡顿。
二 WEB框架
单体架构
单体架构是将所有功能模块(如用户管理、订单处理、支付系统等)打包成一个独立应用程序的架构模式,所有代码、依赖和业务逻辑都集中在一个代码库中,部署为单一实例。
核心特点
- 结构简单:所有功能模块共享同一代码库、数据库和运行环境,开发初期无需考虑模块间通信和分布式问题。
- 部署单一:整个应用打包为一个可执行文件(如 JAR、WAR),部署到单一服务器或集群即可运行。
- 技术栈统一:通常使用一种编程语言和框架开发(如 Java+Spring Boot、Python+Django)。
- 模块耦合度高:模块间通过内部函数调用通信,修改一个模块可能影响其他模块,需要整体测试和部署。
微服务
微服务架构将应用拆分为一系列独立的、可独立部署的小型服务,每个服务专注于实现单一业务功能(如用户服务、订单服务、支付服务),服务间通过网络协议(如 HTTP/REST、gRPC)通信,各自拥有独立的数据库。
核心特点
- 服务拆分:按业务领域(如电商的商品、订单、支付)拆分服务,每个服务是一个独立的应用。
- 独立部署:每个服务可单独开发、测试、部署和扩容,不影响其他服务。
- 技术栈灵活:不同服务可使用不同编程语言和框架(如用户服务用 Node.js,数据分析服务用 Python)。
- 分布式通信:服务间通过 API 或消息队列(如 Kafka、RabbitMQ)交互,需处理网络延迟、容错等问题。
单体架构和微服务比较
三 tomcat的功能介绍
Tomcat 是一款开源的 Java Web 服务器,主要用于运行 Java 开发的 Web 应用程序,是 Java 生态中最常用的服务器之一。
-
运行 Java Web 应用
能解析和执行基于 Servlet、JSP 技术开发的程序,比如企业网站后台、管理系统、API 服务等。开发者编写的 Java Web 代码(如 Spring Boot 应用),最终需要部署到 Tomcat 上才能通过网络访问。 -
处理 HTTP 请求
内置了轻量级的 HTTP 服务器,可直接接收浏览器等客户端发送的 HTTP 请求,将请求传递给对应的 Java 程序处理,再把处理结果(如网页、数据)以 HTTP 响应的形式返回给客户端。 -
管理程序生命周期
作为 Servlet 容器,负责管理 Java Web 组件(如 Servlet)的创建、运行和销毁,提供这些组件运行所需的环境(如内存、网络连接等)。 -
支持多种部署方式
可以直接把 Web 应用打包成 WAR 文件,放到 Tomcat 的指定目录下,它会自动解压并运行,也支持通过管理界面手动部署应用。
安装tomcat
1安装java
[root@tomcatA ~]# yum install java-1.8.0-openjdk.x86_64 -y#查看版本号[root@tomcatA ~]# java -versionopenjdk version \"1.8.0_382\"OpenJDK Runtime Environment (build 1.8.0_382-b05)OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)[root@tomcatA ~]# which java/usr/bin/java[root@tomcatA ~]# ll /usr/bin/javalrwxrwxrwx 1 root root 22 Jul 30 10:52 /usr/bin/java -> /etc/alternatives/java[root@tomcatA ~]# cd /etc/alternatives/java-bash: cd: /etc/alternatives/java: Not a directory[root@tomcatA ~]# cd /etc/alternatives/jre[root@tomcatA jre]# lsASSEMBLY_EXCEPTION bin lib LICENSE THIRD_PARTY_README
2安装并启动tomcat
#安装[root@tomcatA ~]# tar zxf apache-tomcat-9.0.107.tar.gz -C /usr/local/[root@tomcatA ~]# cd /usr/local/[root@tomcatA local]# lsapache-tomcat-9.0.107 etc include lib64 sbin srcbin games lib libexec share[root@tomcatA local]# mv apache-tomcat-9.0.107/ tomcat[root@tomcatA local]# lsbin etc games include lib lib64 libexec sbin share src tomcat[root@tomcatA local]# cd tomcat/[root@tomcatA tomcat]# cd bin/[root@tomcatA bin]# lsbootstrap.jar configtest.sh shutdown.shcatalina.bat daemon.sh startup.batcatalina.sh digest.bat startup.shcatalina-tasks.xml digest.sh tomcat-juli.jarciphers.bat makebase.bat tomcat-native.tar.gzciphers.sh makebase.sh tool-wrapper.batcommons-daemon.jar setclasspath.bat tool-wrapper.shcommons-daemon-native.tar.gz setclasspath.sh version.batconfigtest.bat shutdown.bat version.sh#启动[root@tomcatA bin]# ./startup.shUsing CATALINA_BASE: /usr/local/tomcatUsing CATALINA_HOME: /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME: /usrUsing CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jarUsing CATALINA_OPTS:Tomcat started.
测试
3生成tomcat启动文件
1.生成tomcat的主配置文件
[root@tomcat ~]# vim /usr/local/tomcat/conf/tomcat.confJAVA_HOME=/etc/alternatives/jre
2.生成启动文件
[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
3生成tomcat用户并设定软件安装目录权限
#创建用户[root@tomcatB bin]# useradd -s /sbin/nologin -M tomcat#设定权限[root@tomcatB bin]# chown tomcat.tomcat /usr/local/tomcat/ -R
4.用启动脚本开启服务
[rootatomcatB ~# systemctl enable --now tomcat
tomcat的文件结构和组成
目录结构
目录 说明
-------------------------------------------------------
bin 服务启动、停止等相关程序和文件
conf 配置文件
lib 库目录
logs 日志目录
webapps 应用程序,应用部署目录,相当于nginx的默认发布目录
work jsp 编译后的结果文件,建议提前预热访问
四 结合反向代理实现tomcat部署
常见部署方式介绍
standalone模式,Tomcat单独运行,直接接受用户的请求,不推荐。
反向代理,单机运行,提供了一个Nginx作为反向代理,可以做到静态由nginx提供响应,动态jsp代 理给Tomcat
LNMT:Linux + Nginx + MySQL + Tomcat
LAMT:Linux + Apache(Httpd)+ MySQL + Tomcat
前置一台Nginx,给多台Tomcat实例做反向代理和负载均衡调度,Tomcat上部署的纯动态页面更 适合
LNMT:Linux + Nginx + MySQL + Tomcat
多级代理
LNNMT:Linux + Nginx + Nginx + MySQL + Tomcat
1.安装并配置nginx
#编辑配置文件vim /etc/nginx/conf.d/vhosts.confupstream tomcat { hash $cookie_JSESSIONID; server 192.168.183.10:8080; server 192.168.183.20:8080;}server { listen 80; server_name www.cll.org; location ~ \\.jsp$ { #proxy pass http://192.168.183.10:8080; proxy_pass http://tomcat; }}vim /etc/nginx/nginx.conf#添加include \"/usr/local/nginx/conf.d/*.conf\";#修改地址映射、vim /etc/hosts#测试并重启nginxnginx -tnginx -s reload
2.准备tomcat的测试文件
#上传test.jsp并放到指定位置[root@tomcatA ROOT]# mv /root/test.jsp /usr/local/tomcat/webapps/ROOT/
五 Memcached
Memcached 是一款开源的高性能分布式内存缓存系统,主要用于减轻数据库负载、提高应用程序响应速度。它通过将频繁访问的数据存储在内存中,减少对数据库的直接查询,从而提升系统性能。
核心特性
-
内存存储
数据完全存储在内存中,读写速度极快(微秒级响应),适合存储频繁访问的热点数据(如用户会话、商品信息、计数器等)。 -
分布式架构
支持多服务器集群部署,可通过哈希算法将数据分散到不同节点,实现负载均衡和横向扩展,单节点可处理每秒数十万次请求。 -
简单键值存储
采用键值(Key-Value)结构存储数据,键是字符串(最大 250 字节),值可以是任意数据(最大 1MB),不支持复杂查询(如 SQL)。 -
过期策略
每个键值对可设置过期时间(TTL),过期后自动删除,也支持 LRU(最近最少使用)淘汰机制,当内存不足时自动清理不常用数据。 -
无持久化
数据仅存于内存,不写入磁盘,服务器重启后数据会丢失,因此通常作为 “缓存” 而非 “数据库” 使用,需配合后端数据库持久化数据。 -
轻量级协议
使用简单的文本协议或二进制协议通信,支持多种编程语言(Java、Python、PHP 等)的客户端库。
六 session 共享服务器
当新用户发请求到Tomcat1时, Tomcat1生成session返回给用户的同时,也会同时发给memcached2备 份。即Tomcat1 session为主session,memcached2 session为备用session,使用memcached相当于 备份了一份Session 如果Tomcat1发现memcached2 失败,无法备份Session到memcached2,则将Sessoin备份存放在 memcached1中
nginx+tomcat多端负载均衡
1.安装配置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
2.将spymemcached.jar、memcached-session-manage、kyro相关的jar文件都放到Tomcat的lib目录 中,这个目录是 $CATALINA_HOME/lib/ ,对应本次安装就是/usr/local/tomcat/lib。
unzip jar.zip -d /usr/local/tomcat/lib//usr/local/tomcat/lib/jar/* /usr/local/tomcat/lib/rm -rf /usr/local/tomcat/lib/jar/
修改tomcat配置
[root@tomcat-1 ~]# vim /usr/local/tomcat/conf/context.xml@@@@内容省略@@@@
测试: