企业级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写的东西还在

相关推荐
morris1313 分钟前
【SpringBoot】Xss的常见攻击方式与防御手段
java·spring boot·xss·csp
我要洋人死9 分钟前
导航栏及下拉菜单的实现
前端·css·css3
科技探秘人20 分钟前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
科技探秘人21 分钟前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
JerryXZR26 分钟前
前端开发中ES6的技术细节二
前端·javascript·es6
七星静香28 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员29 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU30 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
q24985969331 分钟前
前端预览word、excel、ppt
前端·word·excel
stewie633 分钟前
在IDEA中使用Git
java·git