10 | 比较:Jetty架构特点之Handler组件
该思维导图由 AI 生成,仅供参考
Handler 是什么
- 深入了解
- 翻译
- 解释
- 总结
Jetty架构特点之Handler组件,通过对Handler接口及其子类的分析,展现了Jetty的高度可定制化特性。Handler作为Jetty的灵魂,负责处理请求并实现了Servlet容器的功能。文章介绍了Handler的继承关系,包括协调Handler、过滤器Handler和内容Handler,以及如何实现Servlet规范的具体方法。Jetty的Handler设计体现了“微内核 + 插件”的设计思想,允许用户自定义Handler来添加到Jetty中,实现高度的可定制化。Jetty的Handler架构与Tomcat的容器组件对等,但Jetty通过Handler实现了更灵活的功能扩展和定制。通过对比Tomcat的架构图,读者可以更好地理解Jetty的Handler组件。文章深入浅出地介绍了Jetty的Handler架构特点,为读者提供了全面的了解和思考。
《深入拆解 Tomcat & Jetty 》,新⼈⾸单¥68
全部留言(15)
- 最新
- 精选
- 秋天hadler只算是一层wrapper,真正处理得还是真正处理servlet逻辑的servlet
作者回复: Handler实现的是Web容器本身的功能,Servlet实现的是具体业务逻辑。
2019-07-1620 - 夏天想学习tomcat架构,大佬有没有推荐的书籍
作者回复: How tomcat works 还不错
2019-06-01215 - 易儿易老师讲的这篇知识点脉络清晰,看完之后能够明确课程内容,但是考虑到开发使用,我却更迷糊了,web开发要怎样跟Jetty这样的容器相结合呢?我们跑在tomcat上的项目能拿下来直接放到Jetty上吗?感觉Jetty需要在项目中增加很多配置才行,对开发的要求也多……没有用过Jetty
作者回复: 在Tomcat可以跑的War包可以直接放到Jetty里跑
2019-07-0127 - -W.LI-老师有jetty源码下载地址链接么?git的下不动😂
作者回复: 源码github上都有的,但是我建议用内嵌式的方式跑Jetty,体会一下SpringBoot是怎么用Jetty的,可以用IDE把源码下载下来,加断点调试。 https://github.com/jetty-project/embedded-jetty-jsp
2019-06-026 - -W.LI-Handler实现了 Servlet 规范中的 Servlet、Filter 和 Listener 功能中的一个或者多个。handler可以持有别的handle,servlet不持有别的servlet。servlet的调用关系通过servlet容器来控制。handler的调用关系通过wabappcontext控制。老师好! Tomcat通过连接器来区分协议和端口号,host区分虚拟主机(二级域名)。jetty里面是怎么绑定的呢?jetty的连接器和容器没有对应关系,所有的容器都可以处理各种的协议么?mapping具体又是在哪里起作用的呢?是handlecollection通过mapping找到对应的wabappcontext吗?
作者回复: 可以给一个wabappcontext配置多个虚拟主机地址,在Jetty中,请求进来后,可以在所有的wabappcontext上进行匹配,首先是虚拟主机名,然后是访问路径。
2019-06-033 - 空知老师问下 server是一个 handlerWrapper 内部应该只有一个hanlder 可是他内部又维护一个handlerCollection,当请求过来时候 去handlerCollection 里面根据url判断是哪个项目 那定义的那个 单独的hanlder 有啥用?
作者回复: 单独的Handler的handle方法也会处理一些自己的逻辑,再调用下一个Handler的handle方法
2019-06-031 - why- Handler 是一个接口, 有一堆实现类 - Handler 接口用 handle 方法处理请求, 类似 Tomcat 的 service - 有 set/getServer 用于关联一个 Server - 用 destroy 销毁释放资源 - Handler 继承关系 - Handler→AbstractHandler→AbstractHandlerContainer - AbstractHandlerContainer 中有其他 handler 的引用, 可实现链式调用 - AbstractHandlerContainer 子类有 HandlerWrapper 和 HandlerCollection. HandlerWrapper 包含一个 Handler 引用; HandlerCollection 包含多个 Handler 引用, 存于数组中 - HandlerWrapper 有两个子类: Server 和 ScopedHandler - Server, 是 Handler 的入口, 必须将请求传递给其他的 Handler 处理 - ScopedHandler 实现具有上下文信息的责任链调用; 有一堆子类来实现 Servlet 规范: ServletHandler; ContextHandler; ContextHandler; ServletContextHandler; WebAppContext - HandlerCollection 用于支持多个 Web 应用, 每个 Web 应用对应一个 Handler 入口 - Server 中有 HandlerCollection, Server 根据 URL 从数组中选择 Handler 处理请求 - Handler 的类型 - 协调 Handler: 负责将请求路由到一组 handler, 如 HandlerCollection - 过滤器 Handler: 自己会处理请求, 再转发给下一个 Handler, 如 HandlerWrapper 及其子类 - 内容 Handler: 调用真正 Servlet 处理请求, 响应内容, 如 ServletHandler, 或 ResourceHandler 响应静态资源请求 - 实现 Servlet 规范 - ServletHandler, ContextHandler, WebAppContext - Jetty 启动 Web 应用分为两步 - 创建 WebAppContext 并配置 WAR 包和应用路径 - 将 WebAppContext 添加到 Server, 并启动 Server - Servlet 规范有: Context, Servlet, Filter, Listen, Session, Jetty 对应的实现为 ContextHandler, ServletHandler, SessionHandler - WebAppContext 是一个 ContextHandler, 并负责管理 ServletHandler 和 SessionHandler - ContextHandler 负责创建并初始化 ServletContext 对象, 另外还包含一组 Handler, 处理特定 URL 的请求(ServletHandler) - ServletHandler 实现 Servlet, Filter, Listen 的功能; 其依赖 Filter/ServletHandler(Filter 和 Serlvet 的包装类) 以及 Filter/ServletMapping 封装 Filter/Servlet 及其映射的路径 - SessionHandler 管理 Session - WebAppContext 将这些 Handler 构成执行链: Connection→SessionHandler→SecurityHandler→...→SevletHandler→Servlet.2019-06-0711
- Wipeher老师。看了下源码。Server中并没有HandlerCollection。而只有一个private final List<Connector> _connectors = new CopyOnWriteArrayList<>(); 所以不太明白,文中为何提到Server有HandlerCollection,而且,从类图上来说,也不符合逻辑,已经声明为HandleWrapper了,为何要维护一个HandlerCollection,不如一开始直接实现一个HandlerCollection就可以了。望老师指教2020-06-1912
- east1.H和S都能处理请求, 2.H可以调用S,S不能调用H, 3.H更多处理通用的处理并且是抽象的,S是处理具体的且比较特定化请求2019-06-012
- 完美世界Jetty Server 就是由多个 Connector、多个 Handler,以及一个线程池组成。 Jetty 的 Handler 设计是它的一大特色,Jetty 本质就是一个 Handler 管理器,Jetty 本身就提供了一些默认 Handler 来实现 Servlet 容器的功能,你也可以定义自己的 Handler 来添加到 Jetty 中,这体现了“微内核 + 插件”的设计思想。 handler 应该会把请求字节流转换为servlet request2019-06-041