企业级WEB应用服务器TOMCAT

tomcat的功能和原理

Tomcat的功能

Apache Tomcat是一个开源的Java Servlet容器,它实现了Java EE(Java Platform, Enterprise Edition)的部分技术规范,包括Java Servlet、JavaServer Pages(JSP)、Java Expression Language(EL)和Java WebSocket等。Tomcat主要用于托管Java Web应用程序,它提供了一个用于执行Java代码的环境,并能够处理HTTP请求和响应。

Tomcat的工作原理

Tomcat的工作原理基于两个核心组件:连接器(Connector)和容器(Container)。连接器负责处理客户端的网络请求,将HTTP请求转换为Servlet API可以理解的请求对象,并将响应从Servlet返回给客户端。容器则负责管理Servlet的生命周期,调用Servlet的服务方法来处理请求。

Tomcat的容器层次结构包括Engine、Host、Context和Wrapper。Engine是顶层容器,可以包含多个Host;Host代表虚拟主机,可以包含多个Context;Context代表Web应用上下文,包含多个Wrapper;Wrapper是最底层的容器,代表一个Servlet。

请求在Tomcat中的处理流程如下:

  1. 连接器接收客户端的HTTP请求。
  1. 请求被封装成ServletRequest对象,并传递给容器。
  1. 容器根据请求的URL和Servlet映射关系找到对应的Servlet。
  1. 如果Servlet尚未加载,则使用反射机制创建Servlet实例并调用其init方法进行初始化。
  1. 接着调用Servlet的service方法来处理请求,并将处理结果封装成ServletResponse对象。
  1. 响应通过连接器返回给客户端。

Tomcat还提供了其他功能,如会话管理、安全性、JMX管理接口、JSP编译和预编译等。通过这些功能,Tomcat能够提供一个全面的环境来部署和运行Java Web应用程序

tomcat的安装

安装java环境

[root@tomcat ~]# yum install java-1.8.0-openjdk.x86_64 -y

解压安装包

[root@tomcat ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/

[root@tomcat ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat #软连接

[root@tomcat ~]# /usr/local/tomcat/bin/startup.sh #启动Java

生成tomcat的主配置文件

[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

[root@tomcat ~]# systemctl daemon-reload

[root@tomcat ~]# systemctl enable --now tomcat

tomcat负载均衡实现

Tomcat负载均衡功能

Tomcat本身不直接提供负载均衡功能,但可以通过与其他软件结合使用来实现。负载均衡是指将进入的网络请求或服务负载分配到多个服务器上,以提高应用程序的可用性和处理能力。在Tomcat的场景中,负载均衡通常用于将用户请求分发到多个Tomcat实例,从而优化资源使用和提高系统的并发处理能力。

Tomcat负载均衡原理

负载均衡可以通过多种技术实现,包括硬件负载均衡器和软件负载均衡器。在软件层面,可以使用Apache HTTP服务器结合mod_proxy模块,或者使用专门的负载均衡软件如Nginx或HAProxy来实现对Tomcat服务器的负载均衡。这些负载均衡器可以根据不同的算法(如轮询、最少连接、IP哈希等)来决定将请求发送到哪个Tomcat实例。

在nginx主机中,需要使用cookiehash来进行调用,需要cookie hash来对JSESSIONID进行匹配

vim /usr/local/nginx/conf.d/php.conf

在浏览器中访问<www.timinglee.org/test.jsp>

先访问10:

写入内容

刷新后访问20:

memcached 操作命令

下载memcached和telnet

dnf install memcached -y

dnf install telnet -y
五种基本 memcached 命令执行最简单的操作。这些命令和操作包括:
set #修改
add #添加
replace #覆盖
get #查看
delete #删除

修改
set leekey 0 60 5
test1
STORED
get leekey
VALUE leekey 0 5
test1
END
add leekey1 0 60 4
test
删除
delete leekey
DELETED
get leekey
END
get leekey1
VALUE leekey1 0 3
lee

session 共享服务器

Session共享是指在多个服务器之间共享同一个用户的会话数据。当用户通过负载均衡或其他方式访问不同的服务器时,这些服务器能够获取和更新相同的会话信息,实现会话数据的一致性。这对于构建具有水平扩展性的Web应用程序或负载均衡环境非常重要3

Session共享的原理

Session共享的底层原理通常依赖于以下几个关键技术点:

  1. 共享存储后端:多个服务器使用同一个共享存储后端,如数据库或分布式缓存系统,这个共享存储后端可以被所有服务器访问到。
  1. SESSION标识符传递:当用户访问其中一个服务器时,该服务器会生成一个唯一的SESSION标识符,并将其存储在用户的浏览器中,通常通过cookie来实现。该标识符用于在共享存储后端中识别用户的会话数据。
  1. 服务器间的会话数据访问:当用户请求到达其他服务器时,这些服务器会检查请求中的SESSION标识符,并使用它来访问共享存储后端,获取用户的会话数据。
  1. 数据一致性:当一个服务器修改了用户的会话数据时,它会将更新后的数据存储回共享存储后端。其他服务器在下次访问时将能够获取到最新的会话数据,确保了会话数据在不同服务器之间的一致性

在两台tomcat中下载memcache

dnf install memcached -y

下载jar包

将jar包复制到tomcat下

cd jar/

cp * /usr/local/tomcat/lib

在tomcat1中配置

[root@tomcat-1 ~]# vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"

failoverNodes="m1"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

在tomcat2中配置

[root@tomcat-2 tomcat]# vim /usr/local/tomcat/conf/context.xml

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

memcachedNodes="m1:172.25.254.10:11211,m2:172.25.254.20:11211"

failoverNodes="m2"

requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"

transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

/>

测试:

在浏览器中访问<www.timinglee.org/test.jsp>

然后随便写入东西,写入的内容会被memcached记录

关闭10tomcat

服务自动变为20,且之前再在10写的东西还在

相关推荐
是梦终空5 分钟前
JAVA毕业设计176—基于Java+Springboot+vue3的交通旅游订票管理系统(源代码+数据库)
java·spring boot·vue·毕业设计·课程设计·源代码·交通订票
落落落sss15 分钟前
sharding-jdbc分库分表
android·java·开发语言·数据库·servlet·oracle
码爸18 分钟前
flink doris批量sink
java·前端·flink
深情废杨杨19 分钟前
前端vue-父传子
前端·javascript·vue.js
Monodye1 小时前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
一丝晨光1 小时前
逻辑运算符
java·c++·python·kotlin·c#·c·逻辑运算符
J不A秃V头A1 小时前
Vue3:编写一个插件(进阶)
前端·vue.js
无名指的等待7121 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
司篂篂2 小时前
axios二次封装
前端·javascript·vue.js
Tatakai252 小时前
Mybatis Plus分页查询返回total为0问题
java·spring·bug·mybatis