jetty全局
上篇文章入口看到server,下面看下server的结构
jetty里面几个主要的概念:
- connector:接收连接
- handler:处理请求
- threadpool:线程池,线程的统一管理
Server将这几个重要概念联系到了一起,从继承结构来看,server本身算是一个可以包含其他handler(也就是个container)的handler,其中又包含了connenctor和threadpool,在内部把这几个部分连到了一起。
Server.doStart()方法:
第一步:新建threadpool,并add到container中,方便后面使用
setThreadPool(new QueuedThreadPool());
第二步:执行handlers的doStart();
super.doStart();
第三步:执行connector的初始化,打开端口,接收请求
_connectors[i].start();
connector
- SslConnector:Secure Sockets Layer,提供一些认证等安全控制的方法
- BlockingChannelConnector:This connector uses efficient NIO buffers with a traditional blocking thread model
- SelectChannelConnector:This connector uses efficient NIO buffers with a non blocking threading model.
- Ajp13SocketConnector:ajp协议通信的时候使用
- NetworkTrafficSelectChannelConnector:支持NetworkTrafficListener(NetworkTrafficListener:A listener for raw network traffic within Jetty.)
- InheritedChannelConnector:首先获取继承自启动虚拟机(VM)的某个进程的channel
handler
主要三大类handler
- 简单的handler:直接继承自AbstractHandler,实现handler功能
- handlerWrapper:装饰模式,在handler外面做一层代理,做一些handler之外的事情
- handlerCollection: handler的容器
lifecycle
jetty中的所有组件都实现LifeCycle接口,组件的每一个动作都会调用对应lifeCycle中的方法(start、stop等),通知_listeners执行对应的方法。
connector初始化流程
以socketConnect为例,清晰一点。
接收请求处理流程
最后进入到connection的handler
忘了把目录结构列一下了
目录名称 | 作用 |
bin | 启动等脚本 |
contexts | 热部署相关文件 |
contexts-available | pre-context |
lib | jar 包 |
etc | 各种配置文件 |
javadoc | api文档 |
logs | 默认日志目录 |
resources | 其他资源目录 |
webapps | 存放web应用 |
start.jar | 启动jetty所需类等 |