设为首页 收藏本站
查看: 932|回复: 0

[经验分享] jetty 架构

[复制链接]

尚未签到

发表于 2017-2-25 11:53:33 | 显示全部楼层 |阅读模式
  Jetty 6 架构
  原文:Jetty 6 Architecture  概括:

  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。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347033-1-1.html 上篇帖子: maven_Jetty_redeploy 下篇帖子: jetty_handler
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表