Jetty项目从9.4.x迁移到10.0.x的技术指南

Jetty项目从9.4.x迁移到10.0.x的技术指南

jetty.project Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more jetty.project 项目地址: https://gitcode.com/gh_mirrors/je/jetty.project

前言

Jetty作为一款轻量级的Java Web服务器和Servlet容器,在10.0.x版本中进行了多项重大更新。本文将详细介绍从Jetty 9.4.x迁移到10.0.x版本时需要注意的关键变化,帮助开发者顺利完成升级工作。

Java版本要求变化

Jetty 10.0.x对运行环境的要求有了显著提升:

| Jetty版本 | 最低Java版本要求 | |-----------|----------------| | 9.4.x | Java 8 | | 10.0.x | Java 11 |

这一变化意味着:

  1. 必须确保生产环境已安装Java 11或更高版本
  2. 构建工具(如Maven/Gradle)需要配置Java 11兼容性
  3. 所有依赖Jetty的项目都需要调整编译目标版本

WebSocket模块的重大变更

WebSocket是Jetty 10.0.x中变化最大的模块之一,主要涉及三个方面:

1. Maven依赖坐标变更

Jetty 10.0.x对WebSocket相关组件的Maven坐标进行了重构,使命名更加清晰和一致。以下是主要变更对照表:

| 9.4.x依赖坐标 | 10.0.x依赖坐标 | |--------------|---------------| | websocket-api | websocket-jetty-api | | websocket-server | websocket-jetty-server | | websocket-client | websocket-jetty-client | | javax-websocket-server-impl | websocket-javax-server | | javax-websocket-client-impl | websocket-javax-client |

变更特点:

  • 所有核心组件都增加了"jetty"标识
  • JSR-356(Javax)实现组件命名更加规范
  • 更清晰地分离了API和实现

2. 类名和包结构重构

Jetty 10.0.x对WebSocket相关的核心类进行了重新组织和重命名,主要变化包括:

| 9.4.x类名 | 10.0.x类名 | |----------|-----------| | NativeWebSocketServletContainerInitializer | JettyWebSocketServletContainerInitializer | | WebSocketServerContainerInitializer | JavaxWebSocketServletContainerInitializer | | WebSocketCreator | JettyWebSocketCreator | | ServletUpgradeRequest | JettyServerUpgradeRequest | | ServletUpgradeResponse | JettyServerUpgradeResponse | | WebSocketServlet | JettyWebSocketServlet | | WebSocketServletFactory | JettyWebSocketServletFactory |

重构特点:

  • 所有核心类都增加了"Jetty"前缀
  • 更清晰地表明了类的用途和归属
  • 包结构更加合理,便于维护和扩展

3. 代码示例对比

以下是一个WebSocket Servlet实现的迁移示例,展示了新旧版本的主要差异:

Jetty 9.4.x实现:

public class ExampleWebSocketServlet extends WebSocketServlet {
    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.setCreator(new WebSocketCreator() {
            @Override
            public Object createWebSocket(ServletUpgradeRequest req, ServletUpgradeResponse resp) {
                return new ExampleEndpoint();
            }
        });
    }
}

Jetty 10.0.x实现:

public class ExampleWebSocketServlet extends JettyWebSocketServlet {
    @Override
    public void configure(JettyWebSocketServletFactory factory) {
        factory.setCreator(new JettyWebSocketCreator() {
            @Override
            public Object createWebSocket(JettyServerUpgradeRequest req, JettyServerUpgradeResponse resp) {
                return new ExampleEndpoint();
            }
        });
    }
}

主要变化点:

  1. 基类从WebSocketServlet变为JettyWebSocketServlet
  2. 工厂接口从WebSocketServletFactory变为JettyWebSocketServletFactory
  3. 创建器接口从WebSocketCreator变为JettyWebSocketCreator
  4. 请求/响应类增加了"Jetty"前缀

迁移建议

  1. 分步迁移策略

    • 先升级Java环境到11+
    • 逐个模块更新依赖坐标
    • 逐步替换已变更的类引用
  2. 兼容性检查

    • 注意检查自定义的WebSocket端点实现
    • 验证WebSocket协议处理逻辑
    • 测试各种连接场景
  3. 性能考量

    • Jetty 10.0.x在WebSocket性能上有显著优化
    • 建议进行基准测试对比
  4. 新特性利用

    • 了解10.0.x新增的WebSocket特性
    • 考虑重构旧代码以利用新API

常见问题

Q: 为什么Jetty 10.0.x要求Java 11? A: Jetty 10充分利用了Java 11的新特性,如HTTP/2的改进、模块化系统等,同时也为了保持与现代Java生态的同步。

Q: 类名为什么要增加"Jetty"前缀? A: 这是为了更清晰地表明这些类是Jetty特有的实现,避免与标准API或其他实现混淆,提高代码的可读性和可维护性。

Q: 是否可以直接替换依赖而不改代码? A: 不可以。由于类名和包结构都发生了变化,必须同步修改代码中的相关引用,否则会导致编译错误或运行时异常。

总结

Jetty 10.0.x的WebSocket模块进行了重大重构,虽然带来了迁移成本,但也带来了更清晰的架构和更好的性能。开发者需要特别注意Java版本要求、Maven依赖坐标变更以及类名和包结构的变化。建议在迁移前充分测试,并利用Jetty 10.0.x提供的新特性优化现有应用。

jetty.project Eclipse Jetty® - Web Container & Clients - supports HTTP/2, HTTP/1.1, HTTP/1.0, websocket, servlets, and more jetty.project 项目地址: https://gitcode.com/gh_mirrors/je/jetty.project

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣正青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值