- 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.
展开