一 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)定义网页中的内容(如文字、图片、链接、表单等)及其语义,是网页的 “骨架”。
核心特点
- 标记语言:使用
<标签名>
包裹内容,标签通常成对出现(如<p></p>
),部分单标签(如<img>
)需自闭合。 - 语义化:标签本身具有含义,例如
<h1>
表示一级标题,<nav>
表示导航栏,<article>
表示文章主体。语义化有助于搜索引擎理解内容,也提升了代码的可读性和可维护性。 - 嵌套结构:标签可以嵌套形成层级关系,如同 “父子”“兄弟”,构成网页的树形结构(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)交互,需处理网络延迟、容错等问题。
单体架构和微服务比较
维度 | 单体架构 | 微服务架构 |
---|---|---|
代码组织 | 单一代码库 | 多个独立代码库(每个服务一个) |
部署方式 | 整体部署 | 独立部署每个服务 |
扩展性 | 整体扩容,灵活性低 | 按需扩容,灵活性高 |
技术栈 | 统一技术栈 | 可多样化选择 |
故障影响范围 | 可能导致整体崩溃 | 仅影响单个服务 |
开发复杂度 | 初期简单,后期随规模增长 | 初期复杂,长期更易维护 |
团队协作 | 适合小团队,需协调代码冲突 | 适合大团队,可并行开发 |
典型技术栈 | Spring Boot、Django | Spring Cloud、Kubernetes、gRPC |
三 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 -version
openjdk 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/java
lrwxrwxrwx 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]# ls
ASSEMBLY_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]# ls
apache-tomcat-9.0.107 etc include lib64 sbin src
bin games lib libexec share
[root@tomcatA local]# mv apache-tomcat-9.0.107/ tomcat
[root@tomcatA local]# ls
bin etc games include lib lib64 libexec sbin share src tomcat
[root@tomcatA local]# cd tomcat/
[root@tomcatA tomcat]# cd bin/
[root@tomcatA bin]# ls
bootstrap.jar configtest.sh shutdown.sh
catalina.bat daemon.sh startup.bat
catalina.sh digest.bat startup.sh
catalina-tasks.xml digest.sh tomcat-juli.jar
ciphers.bat makebase.bat tomcat-native.tar.gz
ciphers.sh makebase.sh tool-wrapper.bat
commons-daemon.jar setclasspath.bat tool-wrapper.sh
commons-daemon-native.tar.gz setclasspath.sh version.bat
configtest.bat shutdown.bat version.sh
#启动
[root@tomcatA bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using 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.target
After=syslog.target network.target
[Service]
Type=forking
EnvironmentFile=/usr/local/tomcat/conf/tomcat.conf
ExecStart=/usr/local/tomcat/bin/startup.sh
ExecStop=/usr/local/tomcat/bin/shutdown.sh
PrivateTmp=true
User=tomcat
Group=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.conf
upstream 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
#测试并重启nginx
nginx -t
nginx -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/memcached
PORT="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 memcache
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
980 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
@@@@内容省略@@@@
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
failoverNodes="n1"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFacto
ry"
/>
测试: