你没读过的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

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

[特殊字符]交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片 🚦交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片 阅读详情

相关推荐

麦克风声源定位原理_声源定位—如何定位到噪声根源?

前言TPA(传递路径分析)专题系列已经开篇。其遵循方法论:源(Source)——路径(Path)——响应(Receiver)有人说TPA好,它可以识别出路径处甚至源的载荷特征,可以量化各个路径的贡献量。有人说声源定位好,不管东西南北中,“源”自其中。但是,声源定位识别出来色彩丰富的一个结果,这结果被您拿来应付工作了,还是真正帮您解决了问题?声源定位定位到了噪声的根源了么?对于一些声源现,...

weixin_39943678的博客 3974

从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

从涡流求解器到瞬态场:Maxwell 3D里无线充电仿真,选对求解器能省一半计算时间

本文深入探讨了Maxwell 3D在无线充电仿真中涡流求解器与瞬态求解器的选择策略,帮助工程师优化计算效率与精度。通过对比分析两种求解器的适用场景、性能差异及实战技巧,揭示如何根据频率特性、材料非线性和动态过程需求做出精准选择,可节省高达50%的计算时间。特别针对3D线圈模型的无线充电系统设计提供了专业建议。

weixin_26861329的博客 233

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

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

weixin_35997133的博客 926

S32K144之芯片锁死解锁——关闭debug端口

S32K144之芯片锁死及解锁 经常捣鼓单片机就会发现,时常会因为某些操作不当导致芯片锁死情况的发生,通过Jlink我们可以读到芯片的ID,但是无法进行Debug,这很是让人苦恼。 基于S32K144的芯片锁死,一般有如下几种可能: 1、时钟配置异常,过高的配置时钟频率以及不配置时钟,都有可能造成芯片保护锁死,我就曾经因为不注意把时钟配置代码注释掉,导致芯片锁死。 2、我是微软雅黑烧写断电,如果在...

weixin_41935674的博客 1万+

PyCharm启动报错急救指南:3步定位.vmoptions文件位置(Win/Mac路径详解)

本文针对PyCharm启动失败问题,提供了一份详细的急救指南。核心在于精准定位并修复关键的.vmoptions配置文件。文章通过三步法详解了在Windows和macOS系统上查找该文件的具体路径,并分析了因新旧版本冲突、破解补丁残留或参数设置错误导致启动失败的常见场景及解决办法,帮助开发者快速恢复IDE的正常工作。

weixin_28835789的博客 704

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

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

fjs的专栏 2936

RK3566 Android11默认客户Launcher修改

【代码】RK3566 Android11默认客户Launcher修改。

Android系统开发笔记 1726

从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

【系统架构设计师】2025年下半年真题论文回忆版及写作要点

本文摘要围绕云原生数据库、性能测试、无服务器架构和秒杀场景等关键技术进行论述。云原生数据库通过容器化、微服务和自动化运维实现弹性扩展;性能测试需要规划测试场景并关注响应时间等关键指标;无服务器架构以事件驱动为核心,简化开发流程;秒杀场景需组合运用扩容、缓存、限流等技术应对高并发。这些技术方案为构建现代高可用系统提供了重要参考。

数据知道的博客 6162

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | 引入GCConv卷积改进YOLO26,含GCC3k2二次创新,能够捕捉更加丰富和复杂的特征信息,助力高效涨点

本文提出了一种基于GCConv模块的YOLO26目标检测模型改进方案。GCConv模块通过多路径结构增强特征学习能力,在训练阶段采用垂直多卷积和水平多路径配置,推理时重参数化为单一3x3卷积,显著提升推理速度而不损失性能。实验表明,该模块在复杂场景和多尺度目标检测任务中表现优异,特别适合资源受限的实时应用场景。文章详细介绍了GCConv的网络结构、核心代码实现、YAML配置文件修改方法,并提供了两种改进方案(GCConv和GCC3k2)的具体配置指导。

Ai缝合怪、助力小伙伴高效发论文 322

Jetty线程模型

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

chuixue24的博客 803

第069篇:浸入边界法进阶

浸入边界法(Immersed Boundary Method, IBM)是处理流固耦合问题的强大数值方法。本文深入介绍直接力法、反馈力法、Ghost Cell方法和多域IBM等高级技术。通过Python实现完整的IBM求解器,展示处理移动边界、弹性边界和多体相互作用的方法。浸入边界法,直接力法,反馈力法,Ghost Cell,流固耦合,移动边界,弹性边界Navier-Stokes方程添加体积力项:∂u∂t+(u⋅∇)u=−1ρ∇p+ν∇2u+f\frac{\partial \mathbf{u}}{\part

2401_87715305的博客 415

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

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

芋道源码 540

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

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

weixin_35282782的博客 429

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

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

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

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

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

weixin_33895274的博客 186

Spring Boot性能优化实战:Tomcat与Jetty选型及分层调优指南

Spring Boot性能优化不是简单配置调参,而是基于基础设施、JVM和应用逻辑三层模型的系统性工程。理解Web容器(如Tomcat、Jetty)的线程模型与连接复用机制,是提升高并发场景下P99延迟的关键;结合GC日志分析、HikariCP连接池精算和SQL执行路径治理,可精准定位内存泄漏、慢查询与连接耗尽等典型瓶颈。该实践适用于金融、电商等对延迟敏感的生产系统,尤其在API网关、实时服务等短连接高频交互场景中,Jetty相较Tomcat展现出显著的响应优势。

weixin_33563728的博客 312

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 编程 366

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
上一篇: 徒手教你使用zookeeper编写服务发现
下一篇: 天下无难试之ArrayList面试刁难大全
codehole_
博客等级 码龄7年 34粉丝 132原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值