你没读过的Jetty使用入门

【总结-学习-提升】web应用为什么需要tomcat容器 关于tomcat的认知 简述: 从几年开发后对tomcat的简短认识--> 静下心来提出疑问 --> 多方面学习后的再认识 现有认识: 一句话:开源的,基于java语言开发的,部署web项目的容器; 假设:tomcat部署目录=tomcat_home=E:\tools\worktools\apache-tomcat-8.0.3; 通常一个web项目的部署包(如打好的wa 阅读详情

640?wx_fmt=jpeg

在近几年的开源Java容器市场上,Tomcat依旧保持在龙头老大的位置,其地位丝毫没有被撼动的迹象。与此同时Tomcat也因为架构臃肿结构复杂而饱受批评。作为Tomcat的另一款替代性的Java容器Jetty要比Tomcat简单很多,Jetty作为内嵌容器被开源社区广泛使用。基于Jetty之上有很多轻量级Java Web框架,比如著名的JFinal就是基于Jetty开发出来的。

640?wx_fmt=jpeg

Jetty的线程架构模型非常简单,分为acceptors,selectors和workers三个线程池。acceptors负责接受新连接,然后交给selectors处理HTTP消息协议的解包,最后由workers处理请求。前两个线程池采用非阻塞模型,一个线程可以处理很多socket的读写,所以线程池数量较小。

大多数项目,acceptors线程只需要1个,selectors线程配置2~4个足矣。workers是阻塞性的业务逻辑,往往有较多的数据库操作,需要的线程数量较多,具体数量随应用程序的QPS和IO事件占比而定。QPS越高,需要的线程数量越多,IO占比越高,等待的线程数越多,需要的总线程数也越多。

640?wx_fmt=jpeg

这张图的上半部分,被称之为ServerConnector连接器,一般是一个ServerSocket对应一个ServerConnector。如果服务器要监听多个端口,就会有多个ServerSocket,相应也会有多个ServerConnector。这上半部分Jetty已经给我们做好了,无需操心其内部实现。需要关心的是业务逻辑,在下半部分的Worker线程里运行,服务器启动前将URL的路由规则以及相应的业务处理器注册进去,然后服务器就可以跑起来了。多个ServerConnector共享同一个Server实例。

下面我们写一个最简单的Hello World

640?wx_fmt=png

在这个例子中我们提供了两个子路由/btc和/eth,分别映射到不同的处理器实例。我们定义了一个连接器,监听本地7777端口。连接器参数中有个HttpConnectionFactory,表示改端口适用HTTP协议,如果要走HTTPS协议,需要使用SslConnectionFactory。除此之外还有ProxyConnectionFactory,在编写代理服务器时需要使用。

注意例子中的线程配置,executors线程池的大小必须大于等于acceptors和selectors数量之和,否则请求会卡住。如果不提供executors参数,acceptors和selectors需要的线程会和workers线程共享线程池,最终实际运行的workers线程数将会偏小。

访问 localhost:7777/btc

640?wx_fmt=jpeg

我们使用eclipse看一下服务器的线程分配情况

640?wx_fmt=jpeg

可以看到除了main线程之外,还有1个acceptor线程,2个selectors[pool-1-thread-x]线程和4个workers[qtp]线程,其中qtp是QueuedThreadPool的首字母缩写。

Jetty提供了非常多的Handler处理器,可以让我们方便的处理各种请求

  1. ResourceHandler 静态资源处理器

  2. Redirector 重定向处理器

  3. ErrorHandler 错误处理器

  4. InetAccessHandler IP地址黑名单白名单限制处理器

  5. BufferedResponseHandler 输出缓冲处理器

  6. ThreadLimitHandler 限制单个IP的线程数,防止Dos攻击

还有很多其它的处理器,这里就不做一一介绍,感兴趣可以查看源码。

640?wx_fmt=jpeg

阅读相关文章,请关注知乎专栏【码洞】

【实战指南】WinPE环境下360系统急救箱的病毒查杀全流程解析 本文详细解析了在WinPE环境下使用360系统急救箱进行病毒查杀的全流程。从制作WinPE启动盘到进入PE环境,再到360急救箱的深度使用和系统修复,提供了实用技巧和常见问题解决方案,帮助用户高效清除顽固病毒。 阅读详情

相关推荐

电路板功能测试系统-FCT for PCBA

电路板功能测试系统用于电路板组件(PCBA)的功能测试(FCT),满足自动化大批量生产的要求。  ● 用户根据自己需要定义测试步骤,灵活方便  ● 适合工业自动化大批量生产应用  ● 系统测试精度高,稳定可靠   一、电路板功能测试系统概述 电路板测试过程通常由多个步骤组成,每单个步骤中需要对多个物理量(电压、电流、电阻、频率、波形等)进行测试。在每个步骤测试时

6814

从Jetty源码分析线程池配置(9.4.12)

从Jetty源码分析线程池配置(9.4.12) 问题描述 Jetty启动后,如果线程数过少导致请求阻塞,造成大量的close_wait状态的连接 大量close_wait的排查可以参考 https://www.jianshu.com/p/b3d45ce92cbd 示例及原理参考 https://zhuanlan.zhihu.com/p/34275781 Jetty所用版本 9.4.12.v20180830 代码示例 相关依赖 <dependency> <groupId>o

Hershey's Blog 1840

Windows环境Oracle19C安装与配置全攻略

本文详细介绍了在Windows环境下安装与配置Oracle19C数据库的完整流程,包括环境准备、安装步骤、网络配置、客户端工具设置及常见问题解决方案。特别针对Windows 10和Windows Server 2016及以上版本提供了优化建议,帮助用户高效完成Oracle19C的部署与维护。

weixin_28455801的博客 487

服务器部署 配置jetty运行参数_Undertow,Tomcat和Jetty服务器配置详解与性能测试

undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,tomcat是apache下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验。然而:当下微服务兴起,spring boot ,spring cloud 越来越热的情况下,选择一款轻量级而性能优越的服务器是必要的选择。spring boot 完美集成了tomcat,jetty和undertow,本文将通...

weixin_35997133的博客 926

保姆级教程:用Jetson Orin Nano和ROS2 Humble搞定PIXhawk 4飞控通信(含配置文件详解)

本文提供了一份详细的Jetson Orin Nano与PIXhawk 4飞控通信配置指南,涵盖硬件连接、ROS2 Humble环境搭建、MAVROS2配置及通信调试全流程。通过实战案例和配置文件详解,帮助开发者快速实现无人机上位机与飞控的稳定通信,适用于无人机开发与自动化控制场景。

weixin_33670786的博客 475

CHB-MIT波士顿儿童医院癫痫EEG脑电数据处理(一)

CHB-MIT癫痫EEG脑电数据处理CHB-MIT头皮脑电图数据介绍CHB-MIT头皮脑电图数据下载CHB-MIT头皮脑电图数据处理提取原始数据滤波(0.1~50hz)数据分块(时间窗口) CHB-MIT头皮脑电图数据介绍 该数据库收集自波士顿儿童医院,其中包括患有难治性癫痫发作的儿科患者的脑电图记录。停用抗癫痫药物后最多持续几天对受试者进行监测,以表征其癫痫发作并评估其对手术干预的候选资格。 从22位受试者中收集了23个病例的记录(5例男性,3至22岁; 17例女性,1.5至19岁)。 (案例chb21是

AI_DOG的博客 1万+

jetty的servlet请求路由与ContextHandlerColleection的实现

我们一般会在tomcat下面部署多个应用,每个应用都对应着一个自己的context,那么就需要一个collection将他们管理起来,而且需要对http请求进行路由,将http请求交个相应的应用来处理。。。。 这件事情在jetty中就是ContextHanlerCollection干的事情,它维护者当前jetty中部署的应用。。。将http请求交给匹配的context,然后context再转由内

fjs的专栏 2936

Aurix TC3XX Cache memory分析

Aurix Cache memory 分析

qwe0405080615的博客 4355

从Jetty源码分析线程池配置(8.1.15)

从Jetty源码分析线程池配置(8.1.15)Jetty8.1.15 源码分析 Jetty 线程模型问题描述代码示例相关依赖Demo示例HelloHandler的源码出现问题解决详细分析Jetty线程模型问题溯源源码追溯acceptor 线程分配源码selectors 线程分配源码worker 模块分配源码Acceptor 往队列中放置对象SelectSet 的 doSelect() 获取对象执行操作总结扩展:newEndPoint() 创建 SelectChannelEndPoint 用来处理请求 Jet

Hershey's Blog 1462

Ubuntu20.04实时内核补丁PREEMPT_RT编译与安装全流程解析

本文详细解析了在Ubuntu20.04系统上编译与安装实时内核补丁PREEMPT_RT的全流程。从内核与补丁版本匹配、编译环境准备,到内核配置、编译排错,再到最终安装、验证与进阶优化,提供了手把手的实战指南,旨在帮助机器人、工业控制等对实时性有苛刻要求的开发者构建低延迟、高确定性的Linux系统。

weixin_29213827的博客 188

Orange3实战教程:文本挖掘---标注语料库地图

Oreange3,文本挖掘,标注语料库地图用于在二维投影中可视化、聚类文档,并用关键词进行标注。

err2008的专栏 818

java 启动 jetty_java – 为JAR文件启动嵌入式jetty服务器

我想要做的是构建一个包含我的项目的可执行JAR文件.我已经将它的依赖项包含在它旁边,也在JAR文件中,所以我的目录列表看起来像这样:~/Projects/Java/web-app/out:web-app.jardependency1.jardependency2.jardependency3.jar我知道并确信我的问题不是来自依赖关系,因为我的应用程序正常运行,直到我启动Jetty嵌入式的那一刻....

weixin_35282782的博客 429

柔性电极材料新突破:清华团队实现0.1mV级脑信号采集精度

清华团队的 0.1mV 级柔性电极突破,不仅是材料科学与神经工程的跨界胜利,更标志着脑机接口从 “信号采集” 向 “神经交互” 的范式转变。当电极与脑组织实现 “柔性共生”,人类首次拥有了窥探大脑微观电活动的 “精密探头”,这既是神经疾病诊疗的里程碑,更是人机融合时代的新起点。随着技术标准化与产业生态的完善,这场始于实验室的 “柔性革命”,正加速向临床病房、智能工厂、消费电子等场景渗透,为脑机接口的大规模应用铺设 “柔性跑道”。:当柔性电极实现 “神经信号的无损捕捉”,如何平衡技术创新与伦理边界?

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2947

链路追踪 SkyWalking 源码分析 —— Collector Jetty Server Manager

点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析...

芋道源码 540

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

skywalking使用方法_SkyWalking 源码分析 —— Collector Jetty Server Manager

摘要: 原创出处 http://www.iocoder.cn/SkyWalking/collector-jetty-server-module/ 「芋道源码」欢迎转载,保留摘要,谢谢!因为微信文章无法外链,所以文章很多方法无法点击,跳转到对应的代码。本文主要基于 SkyWalking 3.2.6 正式版1. 概述2. JettyManagerModule3. JettyManagerProvide...

weixin_40008135的博客 175

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

log4j中调试与错误日志分开_spring – 如何在Jetty/log4j环境中禁用速度调试和INFO日志消息?...

我在Jetty控制台中显示了大量的速度调试和INFO消息.我想关闭信息和调试速度吐出的消息.环境:>我有一个速度属性文件.>我有一个log4j.xml文件>我有一个类路径,可能会出现错误,因为有更多的类比LogKitLogger更常见,因为LogKitLogger来自公共日志,因此它可能并不重要,因为它不是Logkit. Logkit在Velocity Configuring_L...

weixin_33895274的博客 186

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SkyWalking 源码分析 —— Collector Jetty Server Manager

1. 概述 本文主要分享Collector Jetty Server Manager。Collector 通过该管理器,管理启动的多个 Jetty Server,例如 Agent Jetty Server、Naming Jetty Server、UI Jetty Server。 友情提示:建议胖友已经读过《SkyWalking 源码分析 —— Collector Server Component 服务器组件》 Jetty Server Manager 在 SkyWalking 架构图处于如..

weixin_42073629的博客 270

搞定 Web 容器,就能在 Java 领域风生水起?

如果你是一个热衷于技术的 Java 程序员,今天为你分享一位大佬的学习经历,可以让你在众多 Java 开发人员中脱颖而出。这位大佬,我介绍一下:李号双,eBay 技术主管...

xmt1139057136的专栏 709

js中使用camel框架_使用Fabric8在Kubernetes中使用Camel和CDI

js中使用camel框架 序幕 我最近在博客上发表了使用CDI注入Kubernetes服务的信息 。 在本文中,我将更进一步,将Apache Camel带入图片。 因此,我将使用Camel的CDI支持来连接我的组件和路由,以及Fabric8的CDI扩展来自动将Kubernetes服务注入到我的组件中。 我将重用以前的文章中的内容(如果您还没有读过,请仔细阅读),以构建一个独立的骆驼cdi应...

最佳 Java 编程 365

geoserver java web_Geoserver的远程访问...仅限本地主机

我是一名试图迁移到Geoserver的GIS技术人员,遗憾的是我对网络托管并不十分了解 . 我安装了Windows 2.3.1版 . 我能够通过 Map 构建并通过localhost访问它:8080 \ geoserver \ www \我认为这意味着它工作的码头服务器 .我知道我应该能够替换“localhost”所在的本地IP地址,并能够通过Http从另一台计算机访问它 .我无法弄清楚下一步 ....

weixin_34553415的博客 1035

链路追踪 SkyWalking 源码分析 —— Collector Naming Server 命名服务

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码...

芋道源码 442

SkyWalking 源码分析 —— Collector Naming Server 命名服务

1. 概述 本文主要分享Collector Naming Server 命名服务。主要包含如下部分: Collector Naming Server 提供 Http 两个接口,提供 Agent分别查询 Collector Agent Jetty Server 、Collector Agent gRPC Server 集群。 Collector Agent Jetty Server 、Collector Agent gRPC Server 集群内部的注册与发现。 友情提示,建议胖友已经读过《Sk...

weixin_42073629的博客 286

响应式编程笔记三:一个简单的HTTP服务器

# 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习。 我们会看到Reactive是一个有用的抽象 - 对于并发编程来说 - 但它还有一些非常低级别的特性,应该引起我们的注意。 如果我们开始使用这些功能,挖掘其全部潜能,那我们可以控制我们应用中的layers - 那些之前不可见的、被容器|平台|框架...

weixin_30379531的博客 124

关于反爬虫,看这一篇就够了

编者:本文来自携程酒店研发部研发经理崔广宇在第三期【携程技术微分享】上的分享,以下为整理的内容概要。墙裂建议点击视频回放,“现场”围观段子手攻城狮大崔,如何高智商&高情商地完美碾压爬虫。。。关注携程技术中心微信公号ctriptech,可第一时间获知微分享信息~ 你被爬虫侵扰过么?当你看到“爬虫”两个字的时候,是不是已经有点血脉贲张的感觉了?千万要忍耐,稍稍做点什么,就可以在名义上让他们胜利,实际

漫天一星辰的博客 1029

架构整洁之道, 看这一篇就够了!

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34004750的博客 111
上一篇: 徒手教你使用zookeeper编写服务发现
下一篇: 天下无难试之ArrayList面试刁难大全
码洞
博客等级 码龄10年 41粉丝 137原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值