云原生--企业级WEB应用服务器TOMCAT
一、WEB 技术基础
1 HTTP 协议与 B/S 结构
- C/S 与 B/S 对比:C/S 基于 TCP/UDP 的 Socket 编程,如 QQ、Xshell;B/S 基于应用层 HTTP 协议,通过浏览器渲染 HTML,是主流 WEB 开发模式。
- 动态网页技术:从静态 HTML 发展而来,通过 CGI、ASP、PHP、JSP 实现服务端动态生成内容,衍生前端(HTML/CSS/JS,浏览器运行)和后端(JSP/PHP 等,服务端运行)开发分工。
2 前端三大核心技术
| HTML | 超文本标记语言,定义网页结构和内容 | 非编程语言,由标签组成,浏览器负责渲染 |
| CSS | 层叠样式表,美化网页 | CSS3 模块化,存在浏览器兼容问题 |
| JavaScript | 实现网页动态交互 | ECMAScript 为标准,V8 引擎推动 Node.js 诞生,成为唯一前后端通用语言 |
3 同步与异步交互
-
同步:请求后整页刷新,资源浪费、体验差,如传统表单提交。
-
异步:基于 Ajax 技术(核心为 XMLHttpRequest),局部更新网页,前后端彻底分离,目前主流数据格式为 JSON(替代早期 XML)。
二、WEB 应用架构
1 资源访问流程
-
PC / 移动端浏览器:从静态服务器获取 HTML/CSS/JS,图片服务器获取图片,业务服务器获取动态数据(需访问数据库)。
-
手机 App:内置 HTML/JS 文件,仅按需请求图片和动态数据,减少网络传输。
2 主流架构对比
(1)单体架构
特点:所有功能整合在一个工程,单进程部署,Java 实现为 JSP/Servlet 打包成 war/jar。
优点:开发、测试、部署简单,可水平复制扩展 + 负载均衡。
缺点:耦合度高,单个模块故障可能导致全站不可用,迭代需整体重启,不适用于大型项目。
常用 WEB 服务器:开源(Tomcat、Jetty、Glassfish)、商用(WebLogic、WebSphere、Jboss)。
(2)微服务架构
特点:SOA 子集,按业务拆分为独立小服务,单服务只做一件事,独立部署、独立数据库,通过 HTTP/RESTful API 通信。
优点:内聚性高、松耦合,支持多语言开发,团队垂直划分(按业务),易于迭代和集成第三方工具。
缺点:开发 / 测试 / 运维复杂度提升,需解决分布式事务和数据一致性,小型项目使用会增加成本。
常用框架:Dubbo(Java RPC 框架,依赖 Zookeeper)、Spring Cloud(完整微服务解决方案,超集 Dubbo)。
三、Tomcat 核心基础
1 Tomcat 简介
- 免费开源轻量级 WEB 应用服务器,处理 HTML,是Servlet/JSP 容器,适用于中小型系统、低并发场景。
- 仅实现 Java EE 规范中 Servlet/JSP 相关类库,为不完整实现;企业主流版本为 7.x/8.x,最新正式版 9.x。
- 核心组件:Catalina(Servlet 容器)、Jasper(JSP 引擎)。
- 官方地址:http://tomcat.apache.org/
2 Tomcat 安装与启动(Linux 环境)
1.下载安装包
[root@RS1 ~]# wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.115/bin/apache-tomcat-9.0.115.tar.gz
2.部署tomcat
[root@RS1 local]# yum install java-1.8.0-openjdk.x86_64 -y
[root@RS1 ~]# tar zxf apache-tomcat-9.0.115.tar.gz -C /usr/local
[root@RS1 ~]# cd /usr/local/
[root@RS1 local]# ls
bin etc games include lib lib64 libexec sbin share src tomcat-9.0-doc
[root@RS1 local]# mv apache-tomcat-9.0.115/ tomcat
[root@RS1 local]# cd tomcat/
[root@RS1 tomcat]# ls
bin conf lib logs README.md RUNNING.txt webapps
BUILDING.txt CONTRIBUTING.md LICENSE NOTICE RELEASE-NOTES temp work
[root@RS1 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.
[root@RS1 bin]# netstat -antlupe | grep 8080
tcp6 0 0 :::8080 :::* LISTEN 0 139291 10372/java
3制作tomcat的启动脚本
[root@RS1 bin]# vim /usr/local/tomcat/conf/tomcat.conf
JAVA_HOME=/etc/alternatives/jre
[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
[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
[root@RS1 bin]# netstat -antlupe | grep java
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1000 139979 10682/java
tcp6 0 0 :::8080 :::* LISTEN 1000 140563 10682/java
.验证:
浏览器输入服务器IP:8080,出现 Tomcat 默认页面即安装成功
3 tomcat的文件结构和组成
- bin 服务启动、停止等相关程序和文件
- conf 配置文件
- lib 库目录
- logs 日志目录
- webapps 应用程序,应用部署目录,相当于nginx的默认发布目录
- work jsp 编译后的结果文件,建议提前预热访问
四、Nginx与tomcat的整合
1 常见部署模式
Standalone Tomcat:单独运行,直接接收请求,不推荐(无静态资源处理、并发能力弱)。
单机反向代理:Nginx 处理静态资源,动态 JSP 请求转发至 Tomcat(LNMT:Linux+Nginx+MySQL+Tomcat)。
多机反向代理:Nginx 做负载均衡,将请求分发至多台 Tomcat,提升并发能力。
多级代理:LNNMT,多层 Nginx 转发,适用于大型分布式架构。
2.单体架构
[root@Nginx conf.d]# cd /usr/local/nginx/conf/conf.d/
[root@Nginx conf.d]# vim vhosts.conf
server {
listen 80;
server_name app.timinglee.org;
location ~* \.jsp$ {
proxy_pass http://172.25.254.10:8080;
}
}
[root@RS1 ~]# cp test.jsp /usr/local/tomcat/webapps/ROOT/
[root@RS1 ~]# scp test.jsp root@172.25.254.20:/usr/local/tomcat/webapps/ROOT/
[root@Nginx conf.d]# nginx -s reload
#在windows中设定app.timinglee.org的解析
#在浏览器中访问 app.timinglee.org/test.jsp
测试: 
3.tomcat负载均衡
[root@Nginx conf.d]# vim vhosts.conf
upstream tomcat {
hash $cookie_JSESSIONID;
server 172.25.254.10:8080;
server 172.25.254.20:8080;
}
server {
listen 80;
server_name app.timinglee.org;
location ~* \.jsp$ {
proxy_pass http://tomcat;
}
}
[root@Nginx conf.d]# nginx -s reload
#在windows浏览器中访问 app.timinglee.org/test.jsp;
#在windows的另外一个浏览器中访问 app.timinglee.org/test.jsp;
测试

五、Memcached 基础与 Session 共享
原理:交叉保存
即t1 和 m1 部署可以在一台主机上, t2 和 m2 部署也可以在同一台。当新用户发请求到 Tomcat1 时 , Tomcat1 生成 session 返回给用户的同时 , 也会同时发给 memcached2 备份。即 Tomcat1 session 为主 session ,memcached2 session 为备用 session ,使用 memcached 相当于备份了一份 Session如果 Tomcat1发现 memcached2 失败 , 无法备份 Session 到 memcached2, 则将 Sessoin 备份存放在memcached1中.
1.tomcat加载模块
[root@RS1 ~]# unzip jar.zip
[root@RS1 ~]# cd jar/
[root@RS1 jar]# cp * /usr/local/tomcat/
[root@RS1 jar]# scp * root@172.25.254.20:/usr/local/tomcat/lib/
2.安装memcache
[root@RS1 jar]# dnf install memcached
[root@RS2 ~]# dnf install memcached -y
[root@RS1 ~]# vim /etc/sysconfig/memcached
[root@RS2 ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0,::1"
[root@RS1+2 ~]# netstat -antluple | grep memcached
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 988 142615 35756/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 988 142616 35756/memcached
3.配置tomcat
[root@RS1 ]# vim /usr/local/tomcat/conf/context.xml
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<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.KryoTranscoderFactory"
/>
</Context>
[root@RS2 ]# vim /usr/local/tomcat/conf/context.xml
<Context>
<!-- Default set of monitored resources. If one of these changes, the -->
<!-- web application will be reloaded. -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<!--
<Manager pathname="" />
-->
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:172.25.254.10:11211,n2:172.25.254.20:11211"
failoverNodes="n2"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
</Context>
[root@RS1 ~]# systemctl restart tomcat.service
[root@RS2 ~]# systemctl restart tomcat.service
测试
在一个浏览器中访问,提交数据后关闭当前服务器10

跳转到20上后在提交查看数据是否还在
更多推荐
所有评论(0)