`
peizhiinfo
  • 浏览: 1427473 次
文章分类
社区版块
存档分类
最新评论

Jetty6的架构

 
阅读更多


Connector(连接器)集合负责接收HTTP连接。handler(处理器)集合负责处理连接请求并给予响应。而Jetty Server(服务器)则是前两者的管道连接器。负责创建并初始化connector、handler、ThreadPool组件,然后调用start方法启动他们。ThreadPool(线程池)为他们完成工作提供线程。
Jetty Server演示代码

Java代码 复制代码收藏代码
  1. //1:定义server
  2. Serverserver=newServer();
  3. //2:把连接器集合放到server里
  4. Connectorconnector=newSelectChannelConnector();
  5. connector.setPort(8080);
  6. server.setConnectors(newConnector[]{connector});
  7. //3:并把处理器集合放到server里
  8. Handlerparam=newParamHandler();
  9. Handlerhello=newHelloHandler();
  10. HandlerCollectionhandlers=newHandlerCollection();
  11. handlers.setHandlers(newHandler[]{param,hello});
  12. server.setHandler(handlers);
  13. //4:启动server
  14. server.start();
  15. server.join();

模式



jetty遵循一些比较规范的模式,最抽象的概念通过接口定义,如连接器,处理器和缓冲区。在抽象类中实现这些接口的通用操作,如AbstractConnector, AbstractHandler and AbstractBuffer。

Connectors

连接器表示协议的处理者,负责解析请求并生成响应。不同类型的连接器在其基于的协议下有效,如调度模型和IO API的使用:

•SocketConnector - for few busy connections or when NIO is not available.
•BlockingChannelConnector - for few busy connections when NIO is available
•SelectChannelConnector - for many mostly idle connections or asynchronous handling of Ajax requests.
•SslSocketConnector - 没有使用NIO的SSL连接器。
•SslSelectChannelConnector - 使用非阻塞NIO支持的SSL连接器。
•AJPConnector AJP protocol support for connections from apache mod_jk or mod_proxy_ajp

connectors的使用代码

Java代码 复制代码收藏代码
  1. Connectorconnector=newSelectChannelConnector();
  2. connector.setPort(8080);

Handlers

Handler组件负责处理接收到的请求. handler核心的API是handle方法:

Java代码 复制代码收藏代码
  1. publicvoidhandle(Stringtarget,HttpServletRequestrequest,HttpServletResponseresponse,intdispatch)
  2. throwsIOException,ServletException;

这个方法的实现可以处理请求,传递请求到另外一个处理器(或者servlet),或修改并包装请求并传递出去。有三种类型的处理器:

  1. Coordinating Handlers - 负责路由请求到其他处理器的处理器(eg HandlerCollection, ContextHandlerCollection)
  2. Filtering Handlers - 负责增加请求并传递到其他处理器的处理器(eg. HandlerWrapper, ContextHandler, SessionHandler)
  3. Generating Handlers - 负责产生内容的处理器(eg ResourceHandler and ServletHandler)

Handler代码如下

Java代码 复制代码收藏代码
  1. Handlerhandler=newHelloHandler();
  2. server.setHandler(handler);
  3. publicstaticclassHelloHandlerextendsAbstractHandler
  4. {
  5. publicvoidhandle(Stringtarget,HttpServletRequestrequest,HttpServletResponseresponse,intdispatch)throwsIOException,ServletException
  6. {
  7. Requestbase_request=(requestinstanceofRequest)?(Request)request:HttpConnection.getCurrentConnection().getRequest();
  8. base_request.setHandled(true);
  9. response.setContentType("text/html");
  10. response.setStatus(HttpServletResponse.SC_OK);
  11. response.getWriter().println("<h1>HelloOneHandler</h1>");
  12. }
  13. }

Servlets

Context

Contexts是一种处理器,负责组织其他特定URI上下文路径或者一个虚拟机的处理器。通常情况下一个上下文必须有:

  • 一个上下文路径,负责通过上下文定义哪一个请求被处理。 (eg /myapp )
  • 一个基于静态内容的资源(a docroot)
  • 一个类加载器去获得指定上下文中的类(通常在docroot/WEB-INF/classes下)
  • 虚拟机名称

上下文实现包括:

  • ContextHandler
  • Servlet Context
  • a Web Application Context

Context示意代码:

Java代码 复制代码收藏代码
  1. ContextHandlercontext=newContextHandler();
  2. context.setContextPath("/");
  3. context.setResourceBase(".");
  4. context.setClassLoader(Thread.currentThread().getContextClassLoader());
  5. server.setHandler(context);

Web Applications


一个WebAppContext是servlet Context的子类,它提供web应用程序标准的层次结构,以及session, security, listeners, filter, servlets 和JSP的配置。

Java代码 复制代码收藏代码
  1. WebAppContextwebapp=newWebAppContext();
  2. webapp.setContextPath("/");
  3. webapp.setWar(jetty_home+"/webapps/test");
  4. webapp.setDefaultsDescriptor(jetty_home+"/etc/webdefault.xml");
  5. server.setHandler(webapp);

参考资料

分享到:
评论

相关推荐

    Jetty 核心架构

    jetty7 核心架构 细致分析 入门到精通

    Jetty和tomcat比较.docx

    相同点: 1. Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。     ...Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。  

    jetty 架构

    NULL 博文链接:https://bozhi521.iteye.com/blog/363765

    Jetty中文手册

    Jetty体系结构(Architecture) Jetty Classloading Jetty JARS和依赖(Dependencies) 启动参数(Start Options) Jetty and JEE6 Web Profile 配置参考 Jetty XML语法(Syntax)–Jetty IOC Configuration Jetty ...

    jetty-6.1.26-API文档-中英对照版.zip

    赠送jar包:jetty-6.1.26.jar; 赠送原API文档:jetty-6.1.26-javadoc.jar; 赠送源代码:jetty-6.1.26-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jetty-distribution-9.4.0.v20161208.zip

    jetty目录结构如下: * contexts 热部署目录 * etc jetty配置文件目录 * examples jetty示例 * extras jetty可选扩展 * lib 包含jetty所需的jar文件 * LICENSES 就是LICENSES * modules 子模块 * patches 补丁patches...

    jetty-io-9.4.43.v20210629-API文档-中英对照版.zip

    赠送jar包:jetty-io-9.4.43.v20210629.jar; 赠送原API文档:jetty-io-9.4.43.v20210629-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jetty-6.1.26-API文档-中文版.zip

    赠送jar包:jetty-6.1.26.jar; 赠送原API文档:jetty-6.1.26-javadoc.jar; 赠送源代码:jetty-6.1.26-sources.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jetty-http-9.4.11.v20180605-API文档-中英对照版.zip

    赠送jar包:jetty-http-9.4.11.v20180605.jar; 赠送原API文档:jetty-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jetty-http-9.4.43.v20210629-API文档-中英对照版.zip

    赠送jar包:jetty-http-9.4.43.v20210629.jar; 赠送原API文档:jetty-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jetty-webapp-9.3.19.v20170502-API文档-中文版.zip

    赠送jar包:jetty-webapp-9.3.19.v20170502.jar; 赠送原API文档:jetty-webapp-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jetty-continuation-8.1.8.v20121106-API文档-中文版.zip

    赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jetty-util-6.1.26-API文档-中英对照版.zip

    赠送jar包:jetty-util-6.1.26.jar; 赠送原API文档:jetty-util-6.1.26-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jetty-server-9.4.8.v20171121-API文档-中文版.zip

    赠送jar包:jetty-server-9.4.8.v20171121.jar; 赠送原API文档:jetty-server-9.4.8.v20171121-javadoc.jar; 赠送源代码:jetty-server...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jetty-io-9.4.43.v20210629-API文档-中文版.zip

    赠送jar包:jetty-io-9.4.43.v20210629.jar; 赠送原API文档:jetty-io-9.4.43.v20210629-javadoc.jar; 赠送源代码:jetty-io-9.4.43.v...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jetty-sslengine-6.1.26-API文档-中文版.zip

    赠送jar包:jetty-sslengine-6.1.26.jar; 赠送原API文档:jetty-sslengine-6.1.26-javadoc.jar; 赠送源代码:jetty-sslengine-6.1.26-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    jetty-server-8.1.8.v20121106-API文档-中英对照版.zip

    赠送jar包:jetty-server-8.1.8.v20121106.jar; 赠送原API文档:jetty-server-8.1.8.v20121106-javadoc...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jetty-continuation-8.1.8.v20121106-API文档-中英对照版.zip

    赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英

    jetty-servlet-8.1.8.v20121106-API文档-中英对照版.zip

    赠送jar包:jetty-servlet-8.1.8.v20121106.jar; 赠送原API文档:jetty-servlet-8.1.8.v20121106-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    jetty-server-8.1.8-API文档-中英对照版.zip

    赠送jar包:jetty-server-8.1.8.jar; 赠送原API文档:jetty-server-8.1.8-javadoc.jar;...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

Global site tag (gtag.js) - Google Analytics