java 全栈(前端+后端),用户想要访问java程序需要通过nginx,但nginx处理不了java,需要TOMCAT来处理java程序后将数据返回给nginx
#nginx(构建响应报文)------中间件------java(程序)
#中间件
-
企业版:Oracle WebLogic、Red Hat JBoss EAP等
-
社区版:Apache Tomcat等
一、WEB技术
1. 架构
C/S架构
客户端(应用)------服务
B/S架构
浏览器(网页)------服务
2. 前端三大核心技术
(1) HTML
HTML(HyperText Markup Language)是网页的骨架,用标签来定义网页有哪些内容
-
不是编程语言(没有逻辑判断、循环)
-
是标记语言(用一对对标签包裹内容)
-
浏览器能直接识别和渲染
(2)css
CSS(Cascading Style Sheets)是网页的皮肤,控制 HTML 元素的外观(颜色、大小、位置、动画等)
-
也是标记语言(不是编程语言)
-
通过选择器找到 HTML 元素,然后设置样式
-
支持层叠和继承
(3)JavaScript
JavaScript 是网页的灵魂(能做什么动作),让页面从"静态展示"变成"动态交互"
-
是编程语言(有变量、循环、判断、函数),不是标记语言
-
运行在浏览器端(也可以运行在服务器端,如 Node.js)
-
可以动态操作 HTML 和 CSS(增删改查页面元素和样式)
-
事件驱动(响应用户的点击、输入、滚动等操作)
-
支持异步通信(AJAX/Fetch,不刷新页面获取数据)
用户和服务器进行交互时有同步和异步两种模式
同步:用户发来请求时,在网页中按顺序编写内容,如果上一行内容有错或者整个网页有一行错误,想要修改则会直接刷新整个网页,用户又要重新编写内容
异步:用户发来请求编写内容时,是不需要按顺序编写的,也不会因回到上一行修改而导致整个网页重新刷新
(4)JSP后端技术
HTML、CSS、JavaScript ------ 都是静态的,它们是浏览器直接运行的,内容写死在文件里,不会变化
JSP ------ 是动态的
-
JSP(JavaServer Pages)是 Java Web 技术
-
运行在 服务器端(如 Tomcat)
-
可以连接数据库、处理业务逻辑,动态生成 HTML 返回给浏览器
二、web框架
1. web资源和访问
用户通过电脑或手机来访问服务器

2. 后台应用架构

(1)单体架构
传统架构(单机系统),一个项目就是一个工程
all in one的架构方式,所有功能都放在一个应用里
Java实现:jsp、Servlet,打成一个包jar、war部署
易于开发和测试
如果某个功能模块出问题。需要修改就得重新打包
(2)微服务
SOA
- 将功能分配到多个模块
- 某个模块出问题就修复某个模块就行,不用重新修复整个应用
Microservice
- 在SOA的基础是更加细化更多模块
- 多人开发低,维护成本高
优点
- 每个服务足够小,代码容易理解
- 开发简单、效率高,可以由小团队(2-5)单独开发
- 可以使用不同语言开发
缺点
- 一个项目被拆分成多个工程,增加开发、测试、运维和监控等复查度
- 要保证不同服务之间的数据一致,引入了分布式事务和异步补偿机制
微服务架构:Dubbo、Spring cloud
三、TOMCAT
1. TOMCAT实验环境
安装中间件TOMCAT要看企业用的最多的是哪个版本,不一定要下最新的版本
实验环境至少需要三台虚拟主机,一台用来做高新能web服务器(Nginx),两台用来做web应用服务器(rs1和rs2,用来部署TOMCAT)
安装Nginx:RHEL------高性能Web服务器-CSDN博客(三、Nginx源码编译)
下载TOMCAT9版本(目前企业用最多):Apache Tomcat® - Apache Tomcat 9 软件下载

2. 下载tomcat并部署
在rs1主机上下载tomcat和安装Java环境
root@rs1 \~\]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz \[root@rs1 \~\]# yum install java-1.8.0-openjdk.x86_64 -y
部署tomcat
root@rs1 \~\]# ls \[root@rs1 \~\]# tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local/ \[root@rs1 \~\]# cd /usr/local/ \[root@rs1 local\]# ls \[root@rs1 local\]# mv apache-tomcat-9.0.115/ tomcat \[root@rs1 local\]# cd tomcat/ \[root@rs1 tomcat\]# ls \[root@rs1 tomcat\]# cd bin/ \[root@rs1 bin\]# ./startup.sh \[root@rs1 bin\]# netstat -antlupe \| grep 8080
3. 制作tomcat启动脚本
编写启动脚本
root@rs1 bin\]# vim /lib/systemd/system/tomcat.service \[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
设置tomcat环境,创建tomcat用户并进行测试
root@rs1 bin\]# vim /usr/local/tomcat/conf/tomcat.conf 1 JAVA_HOME=/etc/alternatives/jre \[root@rs1 bin\]# useradd -s /sbin/nologin -M tomcat \[root@rs1 bin\]# chown tomcat.tomcat /usr/local/tomcat/ -R \[root@rs1 bin\]# systemctl daemon-reload \[root@rs1 bin\]# systemctl enable --now tomcat.service \[root@rs1 bin\]# systemctl restart tomcat.service \[root@rs1 bin\]# netstat -antlupe \| grep java

4. 在rs2上部署tomcat
###注意:在rs1上部署完tomcat后,在rs2上执行rs1一样的操作部署tomcat
将rs1上的tomcat程序和tomcat启动脚本拷贝到rs2上
root@rs1 local\]# scp -r tomcat/ root@192.168.153.20:/usr/local/ \[root@rs1 local\]# scp /lib/systemd/system/tomcat.service root@192.168.153.20:/lib/systemd/system/tomcat.service
在rs2上安装Java环境,并创建tomcat用户,启动tomcat服务
root@rs2 \~\]# yum install java-1.8.0-openjdk.x86_64 -y \[root@rs2 \~\]# useradd -s /sbin/nologin -M tomcat \[root@rs2 \~\]# chown tomcat.tomcat /usr/local/tomcat/ -R \[root@rs2 \~\]# systemctl daemon-reload \[root@rs2 \~\]# systemctl enable --now tomcat \[root@rs2 \~\]# systemctl restart tomcat.service \[root@rs2 \~\]# netstat -antlupe \| grep 8080 \[root@rs2 \~\]# netstat -antlupe \| grep java

四、nginx与tomcat整合

1. 单体架构
在nginx主机上配置,反向代理,单机运行
root@Nginx \~\]# vim /usr/local/nginx/conf/conf.d/vhosts.conf \[root@Nginx \~\]# nginx -s reload

在rs1的tomcat默认发布目录/usr/local/tomcat/webapps/ROOT/上编写测试文件test.jsp
root@rs1 \~\]# vim /usr/local/tomcat/webapps/ROOT/test.jsp \<%@ page contentType="text/html; charset=GBK" %\> \<%@ page import="java.util.\*" %\> \\
\Cluster App Test\ \ \ Server Info: \<% out.println(request.getLocalAddr() + " : " + request.getLocalPort()+"\
");%\> \<% out.println("\
ID " + session.getId()+"\
"); String dataName = request.getParameter("dataName"); if (dataName != null \&\& dataName.length() \> 0) { String dataValue = request.getParameter("dataValue"); session.setAttribute(dataName, dataValue); } out.print("\Session list\"); Enumeration e = session.getAttributeNames(); while (e.hasMoreElements()) { String name = (String)e.nextElement(); String value = session.getAttribute(name).toString(); out.println( name + " = " + value+"\
"); System.out.println( name + " = " + value); } %\> \ \ \

将测试文件test.jsp也拷贝到rs2的默认发布目录上
root@rs1 \~\]# scp /usr/local/tomcat/webapps/ROOT/test.jsp root@192.168.153.20:/usr/local/tomcat/webapps/ROOT/test.jsp
2026-02-14 19:44.59 /home/mobaxterm vim /etc/hosts
127.0.0.1 localhost
::1 localhost
192.168.153.100 www.timinglee.org lee.timinglee.org bbs.timinglee.org login.timinglee.org www.lee.org www.lee.com php.timinglee.org app.timinglee.org
在浏览器上访问app.timinglee.org/test.jsp

2. tomcat负载均衡
root@Nginx \~\]# vim /usr/local/nginx/conf/conf.d/vhosts.conf \[root@Nginx \~\]# nginx -s reload

再次访问app.timinglee.org/test.jsp,填写表格是不会乱跳到另一个服务器上,真正实现负载均衡

五、session共享服务器
1. msm介绍
msm(memcached session manager)提供将Tomcat的session保持到memcached可以实现高可用
通过tomcat+memcache实现session会话领丢失

2. 下载模块
下载模块,将模块放到/usr/local/tomcat/lib目录下

下载链接:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration
打不开github可以下载瓦特工具箱(Steam++官网) - Watt Toolkit加速github


将模块拷贝到rs1和rs2的tomcat的/lib目录下
root@rs1 \~\]# ls \[root@rs1 \~\]# unzip jar.zip \[root@rs1 \~\]# cp jar/\* /usr/local/tomcat/lib/ \[root@rs1 \~\]# ls /usr/local/tomcat/lib/ \[root@rs1 \~\]# scp jar/\* root@192.168.153.20:/usr/local/tomcat/lib/ # 到rs2查看/usr/local/tomcat/lib/目录下是否有下好的模块 \[root@rs2 \~\]# ls /usr/local/tomcat/lib/



3. 安装memcache
在rs1和rs2上安装memcache,并开启memcache服务
root@rs1 \~\]# dnf install memcached -y \[root@rs1 \~\]# vim /etc/sysconfig/memcached \[root@rs1 \~\]# systemctl restart memcached.service \[root@rs1 \~\]# netstat -antluple \| grep memcached


4. 配置tomcat
在rs1和rs2的/usr/local/tomcat/conf/context.xml
参考模板:https://github.com/magro/memcached-session-manager/wiki/SetupAndConfiguration

root@rs1 \~\]# vim /usr/local/tomcat/conf/context.xml 29 \
\[root@rs1 \~\]# systemctl restart tomcat.service \[root@rs2 \~\]# vim /usr/local/tomcat/conf/context.xml 29 \ \[root@rs2 \~\]# systemctl restart tomcat.service
5. 测试共享服务器
rs1和rs2都在线的情况下访问app.timinglee.org/test.jsp

当rs2挂掉后,再次访问app.timinglee.org/test.jsp到rs1上是否有之前rs2的会话数据
root@rs2 \~\]# systemctl stop tomcat.service


激活rs2的tomcat服务,关闭rs1的tomcat服务,在rs2上查看是否有rs1的会话数据
root@rs2 \~\]# systemctl restart tomcat.service \[root@rs1 \~\]# systemctl stop tomcat.service

