tomcat8原理分析

Tomcat深入学习与理解(一)Tomcat系统架构与原理分析 Tomcat深入学习与理解(一)Tomcat系统架构与原理分析 说明:本次讲述涉及使用Tomcat版本为8.5.50 1. 简介 Tomcat服务器是一个免费的开放源码的Web应用服务器,目前是应用比较广泛的。 从Tomcat的7.0版本开始支持Servlet3.0规范规范,可以支持我们开发过程中不再配置web.xml。 2. 浏览器访问服务器的流程 浏览器访问服务器使用的是http协议,http是应用层协议,用于定义数据通信的格式,具体的数据传输使用的是TCP/IP协议。 用户向浏览器发起http请求 阅读详情

Java中应采用main函数运行。

 1.Tomcat是Java开发的,启动的时候入口类为BootStrap main函数

 2. 执行到我们的main函数中的init方法

  2.1 使用Java的放射技术实例化我们的Catalina(实际上是个包装类,包装了所有的tomcat核心组件 (Connector, Service, Container, Wrapper))

3. 执行BootStrap函数中的load方法,再使用Java反射机制执行Catania的load方法

4. Catalina的load方法解析conf/server.xml配置文件,并且读取到代码中,初始化server

5. 调用fireLicleBase类的init初始化Server(StanderServer 初始化 Server)

  --Service 运行存在多个,负责tomcat业务逻辑操作

  ---Server的Connector连接器主要负责监听客户端的请求,封装请求和响应。

  ----Containet(容器)

  ----- host

 --------context

-----------Wrapper

采用了责任链的设计模式。

6. 在ContextConfig中的webConfig方法解析项目的web.xml。有web.xml的情况就是读,没有就回调(实现WebApplicationInitializer 接口的 无web.xml方式)

7.运行Tomcat项目,判断项目中是否有web.xml,检查web.xml 中 servlet配置,如果有的情况下,再开始初始化。

注意: 

因为外部Tomcat服务器默认启动时候对Jsp支持友好,默认启动的时候就会加载Jsp组件

Tomcat conf/web.xml 定义了JspServlet实现对我们Jsp转换Servlet操作

优化方案:

Tomcat配置优化

减少一些没有必要启动的配置

A.如果在微服务情况下,删除我们视图层加载

  1. 假设我们现在是微服务架构情况下,我们编写的接口都是rest形式http+json 微服务架构中只有接口没有视图层(jsp)
  2. 因为外部tomcat服务器默认启动的时候对jsp支持非常友好,默认启动的时候就会加载我们的jsp组件
  3.  Tomcat conf/web.xml 定义了JspServlet 实现对我们jsp转换servlet操作;
  4. 所以优化策略:将conf/web.xml文件下的JspServlet移除;

B. 外部的tomcat服务器 有这样welcome-file-list 非常浪费效率,直接移除;

C. mime-mapping告诉给浏览器响应类型,如果是微服务项目情况下,移除mime-mapping非json返回类型;

D.在微服务架构中,不会采用session的; 基本被token或者jwt、oatuh2.0

使用token替代我们的session

E. reloadable 为true 当部署的项目web/conf/class文件发生变化的情况直接实现热部署,在生产环境如果设置为true,黑客如果注入了class文件可能会不安全;所以在本地开发环境中可以设置为true,生产环境中必须设置为false;

F.减少日志请求记录 ,在tomcat中日志文件分为:catalina、localhost_access_log、

Catalina属于tomcat最核心的配置文件

localhost_access_log 记录每次请求

建议移除localhost_access_log日志配置文件 conf/server.xml 中的

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

               prefix="localhost_access_log" suffix=".txt"

               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

         <Context docBase="D:\mayikt" path="/mayikt" reloadable="true"/> 

Tomcat线程处理IO模型

Tomcat中分为以下四种IO模型:

  1. BIO 使用传统io模型处理我们请求 阻塞io;
  2. NIO 同步非阻塞式io 效率比BIO提高非常多倍 多路复合机制tomcat8
  3. AIo 异步非阻塞形式 tomcat8
  4. APR  tomcat 以JNI形式调用http服务器的核心动态链接库来处理文件读取或网络传输操作,需要编译安装APR库

SpringBoot内嵌入tomcat是nio,外部tomcat默认的情况下使用apr需要将外部io模型改为nio模式

线程池优化

在我们的conf/server.xml

maxThreads="150" minSpareThreads="10"

maxThreads参数表示我们做多同时存在150个线程;

minSpareThreads 最小活跃的线程是为10个;

配置如何设置:实际项目来定

1.如果并发量比较大的情况下 最小活跃线程建议设置比较大,可以避免重复处理线程 可以增加吞吐量;如果最小活跃的线程如果比较大的情况下,非常占用cpu资源;

2. 如果是项目的并发量比较小的情况下,最小活跃线程可以设置小一点,可以节约cpu内存

实际案例:

20/s tomcat线程池 最大线程树为100 最小活跃线程树30s

Connector的优化:

1.8080 Http协议 处理我们的请求

2.8009 ajp协议 属于tomcat内部通讯端口号

建议移除ajp协议 8009端口监听  减少我们服务器内存消耗;

因为外部tomcat运行加载很多没有必要的配置

【网站】Tomcat启用GZIP压缩,提升web性能 一、前言   最近做了个项目,遇到这么一个问题:服务器返回给客户端的json数据量太大(大概65M),在客户端加载了1分多钟才渲染完毕,费时耗流量,用户体验极其不好。后来网上搜优化的方法,就是Http压缩。   HTTP压缩可以大大提高浏览网站的速度,它的原理是,在客户端请求服务器对应资源后,从服务器端将资源文件压缩,再输出到客户端,由客户端的浏览器负责解压缩并浏览。即:通过减小HTTP响应大... 阅读详情

相关推荐

深入分析Tomcat 8与Servlet源代码:架构与实现细节

虽然Tomcat提供了一些现成的ProtocolHandler实现,但在一些特定情况下,我们可能需要开发一个自定义的ProtocolHandler来处理特殊的协议需求。例如,如果我们想要使用Tomcat作为一个专门处理某种定制协议的后端服务器。开发自定义的ProtocolHandler需要继承自类,实现必要的接口,并且重写关键方法。这些关键方法包括解析协议数据、创建Request和Response对象,以及处理请求和响应的发送。| 功能点 | 描述 | 必要性 |

weixin_35916518的博客 1044

Tomcat8源码分析(四)

Tomcat8源码分析(四)         ————日志系统前言这一节继续解读一些比较通用的组件,来看一下Tomcat8的日志系统JULI。简介首先要说的是JULI(Java Util Logging Interface)不是在每个Tomcat版本中都有的,它是在Tomcat6中才引入的。从整体上来说,JULI是构建在Java的日志系统(java.util.logging)之上的,在看JULI的日

DRFish 4348

tomcat工作原理(中文版)

tomcat工作原理

Tomcat 漏洞复现笔记

Tomcat 简介 Tomcat 是一个开源的轻量级 Web 应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 Java 程序的首选。 实际上 Tomcat 是 Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行 tomcat 时,它实际上作为一个与 Apache 独立的进程单独运行的。 Apache 为 HTML 页面服务,Tomcat 主要运行 JSP 页面和 Servlet。另外,Tomcat 和 IIS 等 Web 服务器一样,具有处理 HTML 页面的.

未完成的歌~的博客 6282

Openwifi 开源项目解读(一)

Openwifi wifi 80211 无线网卡 基带 FPGA linux 驱动 开源

2万+

深入探索 ClickHouse:性能优化之道

在大数据处理的广袤天地里,ClickHouse 宛如一颗璀璨的明星,以其卓越的性能为海量数据的存储与查询提供了强大助力。但要想让 ClickHouse 发挥出极致效能,性能优化至关重要。今天,就让我们一同深入探寻 ClickHouse 的性能优化之路。

arnold66的专栏 1547

java8用什么tomcat_tomcat8和tomcat7差别大吗新项目应该选择哪个?

我也在找这个问题,转载这篇关于早期版本的文章供参考:-----------------------------------------------------------------------------------------------(作者:Eilen,转载需注明。博客主页:http://www.cnblogs.com/Eilen/)一、Apache Tomcat 8介绍Apache To...

weixin_39652810的博客 1025

RSA 2048/4096 签名校验算法

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。 RSA是目前最有影响力和最常用的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准。 今天只有短的RSA钥匙才可能被强力方式解破。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。只要其钥匙的长度足够长,用RSA加密的信息实际上是不能...

qq_38769551的博客 9499

为什么要使用Tomcat

Tomcat是运行java的网络服务器,底层是一个socket的程序,同时Tomcat也是JSP和Serlvet的容器 那么为什么我们要用Tomcat呢? 一般情况下,如果我们使用HTML/CSS/JS编写了一个网页,这个网页只能由我们本地打开,别的人无法通过远程访问这个页面。那么Tomcat就解决了这个问题,让其他人也可以访问我们写的页面。 ...

m0_54866636的博客 2139

C#实战:如何从零构建一个轻量级软PLC梯形图编辑器(附完整源码)

本文详细介绍了如何使用C#从零开始构建一个轻量级软PLC梯形图编辑器。内容涵盖项目架构设计、GDI+图形渲染、编辑交互实现以及核心的扫描执行引擎开发,并提供了定时器、计数器等高级功能的实现思路与完整源码,为开发者深入工业自动化领域提供了实战指南。

4k5l6j7h8的博客 257

Oracle PLM Agile936 单点登录配置方式

Oracle PLM Agile936 单点登录配置方式

Jay的个人博客 824

什么是Tomcat

Tomcat

weixin_66119119的博客 502

[系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析

如果你想成为一名逆向分析或恶意代码检测工程师,或者对系统安全非常感兴趣,就必须要认真分析一些恶意样本。熊猫烧香病毒就是一款非常具有代表性的病毒,当年造成了非常大的影响,并且也有一定技术手段。本文将详细讲解熊猫烧香的行为机理,并通过软件对其功能行为进行分析,这将有助于我们学习逆向分析和反病毒工作。后续作者还将对其进行逆向调试,以及WannaCry勒索蠕虫、各种恶意样本及木马的分析。基础性文章,希望您喜欢!同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安

杨秀璋的专栏 7327

Tomcat底层原理分析:8.Tomcat安全性配置解析

本文导读 本文主要讲了Tomcat部署后需要修改哪些默认配置,从而保证Tomca的安全性; 以及如何为我们部署在Tomcat上的Web项目设置https协议,从而进一步保证Web项目的安全性。 1.配置安全 部署完Tomcat环境之后,Tomcat会有一些默认功能和默认配置,建议按照下面的提示修改Tomcat的默认配置!!! 安装完Tomcat后,强烈建议情况webapps目录下所有的文件,即禁用Tomcat的管理界面,防止出现别人通过管理界面修改部署在Tomcat中的web服务; 注释或者删除tom

桔子 633

YOLOv11改进 - 卷积Conv | RFAConv:感受野注意力卷积动态调整感受野,提升小目标检出精度

本文介绍了感受野注意力卷积(RFAConv)及其在 YOLOv11 中的结合。空间注意力虽广泛应用但有局限,RFAConv 是将空间注意力与卷积操作融合的新型注意力机制,通过强化感受野空间特征关注、解决卷积核参数共享挑战、增强大尺寸卷积核处理能力等策略优化卷积核功能。它有基于 Group Conv 和 Unfold 两种实现方式,实验表明前者性能更好。我们将 RFAConv 集成进 YOLOv11,在数据集实验证明了方法优越性 。

魔改工程师的博客 1220

HarmonyOS 鸿蒙开发DevEco Studio OpenHarmony:安全测试

通过对HarmonyOS应用生命周期建模和应用攻击面建模,采用静态数据流分析技术,提高漏洞发现的准确率,同时覆盖20余种攻击面,65+漏洞测试项,帮助开发者提前发现和识别漏洞隐患。在检测报告中,会针对每一项漏洞风险项给出明确的修复建议,可以帮助开发者快速修复漏洞。

斌擎科技 1182

Tomcat8源码解析

Tomcat是一款大家非常熟悉的web服务器,具体的功能和怎么使用我就不赘述咯,今天我们主要来分析Tomcat的源码,基于的版本是8.0.11。问题是从哪边开始着手呢?我是这样想的,肯定是先把Tomcat8.0.11的源码在官网中下载下来,然后导入到工程中。 1 Tomcat源码下载及导入工程 1.1 源码下载 Tomcat版本:Tomcat8.0.11 下载地址:点击下载 然后选择对应的平台即...

Link的博客 488

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

互联网架构-Tomcat8深度源码分析-057:Tomcat8底层架构模式

057:Tomcat8底层架构模式1 Tomcat8底层源码分析课程介绍2 Tomcat8基本的介绍3 Tomcat8目录结构的介绍4 Tomcat8四种部署的方式5 使用jconsole连接tomcat内存6 将tomcat8源码导入idea开发工具中7 启动tomcat8源码项目8 亲手画图分析Tomcat8架构9 总结Tomcat8架构设计思想 1 Tomcat8底层源码分析课程介绍 课程内容 1.Tomcat8启动方式有哪些 2.Tomcat底层是如何实现启动 3.idea如何导入Tomcat8源码

枫火的博客 420

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

eclipse部署tomcat add没有8.5_Tomcat源码分析(1)—搭建Tomcat源码环境

愿你越努力越幸运「歇一歇,继续奔跑」作为Java Web的开发者,一定离不开Tomcat服务器的接触,对于如何使用Tomcat服务器部署项目,大家或许很熟悉,所谓知其然知其所以然,对于Tomcat是如何运行我们部署的项目,我们也应该知道其原理,有利于以后及时定位到问题。硬件环境JDK 1.8Intellij IDEATomcat8.5.59Ant1.10.9Maven 3.6.3...

weixin_39805255的博客 403

Tomcat - 源码分析Tomcat是如何处理一个Servlet请求的

文章目录Tomcat中的NIO模型 Tomcat中的NIO模型 Tomcat 8.5.55

小工匠 2万+

tomcat8最新版本_Tomcat8史上最全优化实践

Tomcat8优化1、Tomcat8优化1.1、Tomcat配置优化1.1.1、部署安装tomcat81.1.2 禁用AJP连接1.1.3、执行器(线程池)1.1.4 3种运行模式1.3、使用Apache JMeter进行测试1.3.1、下载安装1.3.2、修改主题和语言1.3.3、创建首页的测试用例1.3.4、启动、进行测试1.3.5、聚合报告1.4、调整tomcat参数进行优化1.4.1、禁用...

weixin_39577289的博客 1823

Tomcat 8熵池阻塞变慢详解

Tomcat 8熵池阻塞变慢详解 Tomcat 8启动很慢,且日志上无任何错误,在日志中查看到如下信息: Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 - Loading properties file from class pat...

165

初探Tomcat的架构设计

Tomcat 作为 servlet 容器实现,它是基于 Java 语言开发的轻量级应用服务器。因为 Tomcat 作为应用服务器,它有着完全开源,轻量,性能稳定,部署成本低等优点,所以它...

好好学java 521

tomcat编解码过程

在使用tomcat的时候, 一直很好奇他是怎么对请求的参数进行编解码的,带着下面三个问题,一起看下。 1. get/post请求参数如何编解码,根据请求头部中什么参数配置 2. URI编码 3. 中文参数为什么会出现乱码 4. POST请求参数form表单和Json编码策略是否一样 1. 下图是tomcat各版本默认的编解码方式 我们发现tomca6和tomcat7对UR...

u010627840的专栏 886

JDK8+tomcat8环境tomcat启动时SecureRandom 非常慢解决办法

JDK 8 + tomcat8 启动有时会出现 org.apache.catalina.util.SessionIdGeneratorBase- Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [413,255] milliseconds 耗时时间很长。 Tomcat 8启动很慢,且...

u010448530的博客 1444

tomcat的NIO线程模型源码分析

1 tomcat8的并发参数控制 这种问题其实到官方文档上查看一番就可以知道,tomcat很早的版本还是使用的BIO,之后就支持NIO了,具体版本我也不记得了,有兴趣的自己可以去查下。本篇的tomcat版本是tomcat8.5。可以到这里看下tomcat8.5的配置参数 我们先来简单回顾下目前一般的NIO服务器端的大致实现,借鉴infoq上的一篇文章Netty系列之Netty线程模型中的一张图...

缘自天方的博客 628
上一篇: tomcat和spring mvc
下一篇: Spring注解(生命周期)
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值