jetty 架构

                                                                             Jetty 6 架构

原文:Jetty 6 Architecture

概括:

jetty架构

Jetty server是由一组接受http连接的Connectors和一组处理来自连接的请求并作出响应的Handlers构成的,其工作是通过取自线程池中的线程来完成的。

 

注意:虽然jettyrequest/responses是从Servlet api传递来的,但是要获得全功能的servlet api必须配置适当的handler。比如:在request中的session api只有在request传递给了SessionHandler之后才可用。Servlet概念本身是由ServletHandler实现的。如果servlets不是必须的,servlet api很少使用。因此,jetty可以通过简单的connectiorshandlers构建,而不需要servlets

 

Jetty的配置工作就是构建一个connectors和handlers的网络,并提供他们单独的配置。因为jetty组件就是简单的POJO,这种组件的配置可以通过多种技术实现:

Ø         在代码中实现, 可以查看org.mortbay.jetty.example包中的例子。

Ø         使用jetty.xml-xml格式的依赖注入风格

Ø         使用依赖注入框架:Spring或Xbean

Ø         使用Deployers:WebAppDeployer, ContextDeployer

 

 

模式

Jetty的实现遵循一些标准的模式,大部分的抽象概念通过接口捕获(captured)的,比如Connector,Handler,Buffer。这些接口的通用处理通过抽象类来实现,比如:AbstractConnector, AbstractHandler and AbstractBuffer

从JSR77的生命周期得到灵感,大部分的jetty组件是通过LifeCycle接口呈现的,其抽象实现(AbstractLifeCycle)是大部分jetty组件的基础。

Jetty提供了自己的建立在String,byte数组和nio缓冲之上的IO buffer的抽象。这样得到更好的可移植性,并且也隐藏了一些nio层和它的高级特性的复杂性。

 

Connectors

Connectors进行协议的处理:接受连接,分析请求,生成响应。基于使用的协议,调度模型,io api的不同,有多中可用的connector:
SocketConnector – 用于繁忙的连接或是nio不可用的场合
BlockingChannelConnector -用于繁忙的连接,并且nio可用
SelectChannelConnector – 用于大部分时间空闲的连接或者ajax请求的异步处理
SslSocketConnector – SSL,并且NIO不可用
SslSelectChannelConnector - SSL ,并且支持非阻塞的NIO
AJPConnector - AJP 协议支持,用于来自apache mod_jk or mod_proxy_ajp的连接

Handlers

Handler是用来处理接收到的请求的组件。Handler的核心api是handle方法:
public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
throws IOException, ServletException;

该方法的实现中,必须处理请求,将请求传递到另一个handler(或servlet),或者是改变和(或)包装请求之后再传递出去。这里给出三种风格的Handler:
协调处理器 – 将请求传递给其他的handlers (eg HandlerCollection, ContextHandlerCollection)
过滤处理器 – 对请求进行包装后再传递给其他的handler (eg. HandlerWrapper, ContextHandler, SessionHandler)
生成处理器 – 生成内容(eg ResourceHandler and ServletHandler)

另见: Writing a Jetty Handler。
Servlets

      

ServletHandler是一个生成内容(content)的Handler,通过将请求传递给任何配置的过滤器(Filters),然后再传递给通过url patten映射到的Servlet

ServletHandler通常部署在Servlet上下文(Context)中。Servlet上下文是一个ContextHandler,包含有方便的从url映射到servlet的方法。

Filters和servlets也可以在当前的上下文中使用RequestDispatcher将请求发送到其他的context或是servlet。

Context

Context 是用于将其他handler分组在特定的URL 上下文路径或者虚拟主机之下的handler。通常一个context包含:
一个上下文路径( context path)用来定义什么请求会被context处理 (eg /myapp )
一个资源根路径(resource base)用来提供静态内容 (eg: docroot)
一个类载入器,用于载入特定于conext的类 (通常: docroot/WEB-INF/classes)
虚拟主机名

Context的实现包括:
ContextHandler
Servlet Context
Web Application Context.

web application context 将security, session and servlets handler组合进一个单独的单元中,可以通过web.xml的描述符进行的配置。
Web Applications


WebAppContext是servlet 上下文的延伸,支持标准的web程序布局和通过web.xml的描述符进行的session,security,listeners,filter,servlet和jsp的配置

本质上,WebAppContext是一个帮助其他handler构建和配置,以完成标准webapp配置的方便的类

配置实际上是通过可插拔的Configuration 类来实现的,其中最首要的是WebXmlConfiguration

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值