`
fantasy
  • 浏览: 508480 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Jetty的架构(翻译)

 
阅读更多

Jetty的架构


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

//1:定义server
Server server = new Server();

//2:把连接器集合放到server里
Connector connector=new SelectChannelConnector();
connector.setPort(8080);
server.setConnectors(new Connector[]{connector});

//3:并把处理器集合放到server里
Handler param=new ParamHandler();
Handler hello=new HelloHandler();
HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[]{param,hello});
server.setHandler(handlers);

//4:启动server
server.start();
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的使用代码

Connector connector=new SelectChannelConnector();
connector.setPort(8080);

Handlers

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

 

public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch)
    throws IOException, ServletException;
 

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

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

Handler代码如下

Handler handler=new HelloHandler();
server.setHandler(handler);

 public static class HelloHandler extends AbstractHandler
    {
        public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException
        {
            Request base_request = (request instanceof Request) ? (Request)request:HttpConnection.getCurrentConnection().getRequest();
            base_request.setHandled(true);

            response.setContentType("text/html");
            response.setStatus(HttpServletResponse.SC_OK);
            response.getWriter().println("<h1>Hello OneHandler</h1>");
        }
    }
 

Servlets

Context

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

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

上下文实现包括:

  •  ContextHandler
  • Servlet Context
  •  a Web Application Context

Context示意代码:

ContextHandler context = new ContextHandler();
context.setContextPath("/");
context.setResourceBase(".");
context.setClassLoader(Thread.currentThread().getContextClassLoader());
server.setHandler(context);
 

Web Applications


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

WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar(jetty_home+"/webapps/test");
webapp.setDefaultsDescriptor(jetty_home+"/etc/webdefault.xml");

server.setHandler(webapp);
 

参考资料

  • 大小: 43.4 KB
  • 大小: 43.4 KB
  • 大小: 4.4 KB
  • 大小: 33 KB
  • 大小: 19.6 KB
分享到:
评论

相关推荐

    jetty 架构

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

    Jetty 核心架构

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

    Jetty和tomcat比较.docx

    相同点: 1. Tomcat和Jetty都是一种...Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。 Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。  

    jetty相关的全部jar包

    jetty-security-9.4.8.v20171121.jar,jetty-io-9.4.8.v20171121.jar,jetty-continuation-9.4.8.v20171121.jar,jetty-client-9.4.8.v20171121.jar,jetty-jmx-9.4.8.v20171121.jar,jetty-plus-9.4.8.v20171121....

    Jetty多版本软件包

    Jetty软件包内容: jetty-distribution-9.4.51.v20230217.tar.gz jetty-distribution-9.4.51.v20230217.zip jetty-home-10.0.15.tar.gz jetty-home-10.0.15.zip jetty-home-11.0.15.tar.gz jetty-home-11.0.15.zip ...

    eclipse jetty插件run-jetty-run-1.3.3

    eclipse jetty插件,从...下载run-jetty-run.zip文件,解压后再编写个links文件丢到eclipse的dropins目录下即可,省去了使用eclipse update方式安装的麻烦。 link文件样例如: path=d:\\eclipse_plugins\\run-jetty-run

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

    包含翻译后的API文档:jetty-6.1.26-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.mortbay.jetty:jetty:6.1.26; 标签:mortbay、jetty、jar包、java、API文档、中英对照版; 使用方法:解压翻译后...

    jetty6 指南书

    jetty是什么 jetty配置 jetty使用 jetty嵌入 jetty启动 jetty部署 jetty教程 jetty嵌入式 jetty

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

    包含翻译后的API文档:jetty-io-9.4.43.v20210629-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.eclipse.jetty:jetty-io:9.4.43.v20210629; 标签:eclipse、jetty、中英对照文档、jar包、java; ...

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

    包含翻译后的API文档:jetty-6.1.26-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.mortbay.jetty:jetty:6.1.26; 标签:mortbay、jetty、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器...

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

    包含翻译后的API文档:jetty-sslengine-6.1.26-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.mortbay.jetty:jetty-sslengine:6.1.26; 标签:sslengine、mortbay、jetty、jar包、java、中文文档; 使用方法:...

    jetty嵌入式服务器必须的jar包

    jetty嵌入式服务器开发所必须的jar包,本人使用jetty版本为6.1.3,jar包总数为9个,来自jetty:commons-el-1.0.jar,jasper-compiler-5.5.15,jasper-compiler-jdt-5.5.15.jar,jasper-runtime-5.5.15.jar,jetty-...

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

    包含翻译后的API文档:jetty-http-9.4.11.v20180605-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.eclipse.jetty:jetty-http:9.4.11.v20180605; 标签:eclipse、jetty、http、中英对照文档、jar包...

    jetty相关所有jar包

    jetty相关所有jar包,包含jar包: jetty-continuation-8.1.15.v20140411,jetty-http-8.1.15.v20140411,jetty-io-8.1.15.v20140411,jetty-security-8.1.15.v20140411,jetty-server-8.1.15.v20140411,jetty-util-8.1.15...

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

    包含翻译后的API文档:jetty-http-9.4.43.v20210629-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.eclipse.jetty:jetty-http:9.4.43.v20210629; 标签:eclipse、jetty、http、中英对照文档、jar包...

    PDF的JETTY文档

    .jetty

    jetty各个版本下载

    jetty各个版本下载

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

    包含翻译后的API文档:jetty-webapp-9.3.19.v20170502-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.eclipse.jetty:jetty-webapp:9.3.19.v20170502; 标签:eclipse、jetty、webapp、中文文档、jar包、java;...

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

    包含翻译后的API文档:jetty-util-6.1.26-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.mortbay.jetty:jetty-util:6.1.26; 标签:util、mortbay、jetty、jar包、java、API文档、中英对照版; 使用...

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

    包含翻译后的API文档:jetty-continuation-8.1.8.v20121106-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.eclipse.jetty:jetty-continuation:8.1.8.v20121106; 标签:eclipse、jetty、continuation、中文...

Global site tag (gtag.js) - Google Analytics