Jetty篇一之初识Jetty

本文介绍了Jetty和Tomcat两种流行的Web容器的特点及架构差异。Jetty因其轻量级、灵活性高和易于集成的优点被广泛应用于各种场景中;而Tomcat则以其强大的容器管理和丰富的插件支持闻名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:        

        最近公司项目中用到了Jetty来作为项目的web容器,借此机会来分享一下我的学习心得。在学习Jetty之前,一定要了解一些Jetty的基本概念以及优缺点,这样才方便做更深入的学习,现在让我来慢慢揭开它的神秘面纱吧!

基础:

    什么是Jetty?

        简单来讲Jetty就是一个开源的HTTP服务器和Servlet引擎,它可以为JSP和Servlet提供运行时环境,比如Java Web应用最常用的Servlet容器Tomcat,由于其轻量、灵活的特性,Jetty也被应用于一些知名产品中,例如ActiveMQ、Maven、Spark、GoogleAppEngine、Eclipse、Hadoop等。

    为什么使用Jetty?

        ①异步的 Servlet,支持更高的并发量  

        ②模块化的设计,更灵活,更容易定制,也意味着更高的资源利用率

        ③在面对大量长连接的业务场景下,Jetty 默认采用的 NIO 模型是更好的选择

        ④将jetty嵌入到应用中,使一个普通应用可以快速支持 http 服务

 

    Jetty的基本架构:                                                                                              

          

        Jetty 的架构比较简单,核心组件主要是由 Server 和 Handler 组成。其中 Server 的 Handler 是其比较重要的一个数据模型,Jetty 中所有的组件都是基于  Handler 来实现的。

 

 

 

 

 

Tomcat的基本架构:

        

        Server是Tomcat的最顶层元素,是service的集合,即可包含多个service,Server控制整个Tomcat的生命周期。Service由一个Container和多个Connector组成(或者说由Connector,Engine和线程池[可选]组成),形成一个独立完整的处理单元,对外提供服务。

 

 

 

 

Jetty与Tomcat的对比:

        ①Jetty 比较容易贴合第三方框架,比如你可以直接用 Spring 配置一个 Jetty 服务器

        ②直接可以将 Jetty 作为提供 HTTP 服务的组件,嵌入到应用中

        ③Jetty 是面向 Handler 的架构,而 Tomcat 是面向容器的架构

        ④Jetty 默认采用 NIO 技术,而 Tomcat 默认是 BIO

        ⑤Jetty 高度模块化,可以很灵活的管理拓展组件,而 Tomcat 对其他组件的管理则相对困难

 

03-08
### Jetty 服务器介绍 Jetty款轻量级的 Java HTTP(S) 服务器和 Servlet 容器,广泛应用于开发环境以及生产环境中部署 Web 应用程序。其设计目标是为了提供高效能、可扩展性和灵活性,在处理高并发请求方面表现出色[^1]。 ### 使用 Spring Boot 集成 Jetty Spring Boot 默认采用 Tomcat 作为嵌入式的 Servlet 容器,但也可以轻松切换至其他容器如 Jetty 或 Undertow。为了在 Spring Boot 中使用 Jetty 而不是默认的 Tomcat,可以通过排除 `spring-boot-starter-tomcat` 并引入 `spring-boot-starter-jetty` 来实现这点: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 排除Tomcat依赖 --> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <!-- 添加Jetty依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> ``` 通过上述配置更改后,应用程序启动时将会自动加载 Jetty 作为内嵌式 Web 服务器来运行应用实例。 对于更高级别的定制化需求,比如调整线程池大小或其他性能参数,则可以自定义 `ServletWebServerFactory` 的 Bean 实现。 ### 创建 WAR 文件用于外部 Jetty 部署 如果希望构建个可以在独立安装版 Jetty 上部署的应用程序包 (WAR),则需确保项目的打包方式设置为 war,并且正确指定主类入口点以便于命令行执行。下面是个典型的 Maven POM 设置片段展示如何创建这样的项目结构[^2]: ```xml <packaging>war</packaging> <properties> ... <start-class>com.example.MyApplication</start-class> ... </properties> ``` 此外还需要注意的是当以这种方式发布时应移除任何关于内置容器的支持代码,因为此时将由外部 Jetty 处理所有的HTTP 请求路由工作。 ### 日志记录工具 Log4j 在 Maven 项目中的集成 Log4j 是 Apache 提供的个开源日志框架库,允许开发者方便地控制不同级别的消息输出行为。要在基于 Maven 构建系统的Java工程里加入此功能支持,首先要做的就是在 pom.xml 文件中声明相应的依赖关系项[^3]: ```xml <dependencies> ... <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>${log4j.version}</version> </dependency> ... </dependencies> ``` 接着按照官方文档指导完成必要的初始化过程即可开始利用它来进行有效的错误跟踪与调试辅助操作了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值