Jetty设计的很简洁易懂:
Jetty的核心组件及作用如下:
HttpListener:监听客户端请求,有请求,则构建HttpConnection对象,就像建立了一个连接
HttpConnection:HttpConection会构建HttpRequest和HttpResponse对象,完成用户数据的封装,然后调用HttpServer.service(HttpRequest req,HttpResponse res)方法.这个过程非常形象,一次请求的连接建立好之后就触发HttpServer的service方法处理本次请求。
HttpServer:HttpServer可以有多个HttpContext,每个HttpContext代表一个web application,这个也很好理解:一台服务器可以部署多个web application,每个web application可以指定一个端口监听请求,因此HttpServer也就可以对应多个HttpListener。HttpServer.service方法会调用HttpContext.handle方法,也很好理解:HttpServer分析出当前请求属于哪个具体的HttpContext,然后就把请求交给目标HttpContext来处理。
HttpContext:代表一个web application,其核心方法是handler
HttpRequest
HttpResponse
HttpHandler:每个HttpContext(一个web application)可以有多个HttpHandler,比如Jetty默认的HttpHandler实现包括
1)ReourceHandler:用于处理静态内容,如以扩展名为.html的文件
2)SecurityHandler:提供基本的安全验证
3)ForwardHandler:转发一个request到另一个url
4)ServletHandler:用于将request交由具体的Servlet类进行处理
标准web应用的配置信息在WEB-INF/web.xml中,对于Jetty服务器来说,容器启动装载web应用时,web.xml中配置由XmlConfiguration对象代表,Jetty使用java反射技术从XmlConfiguration中构建当前web应用的HttpHandler对象。