美文网首页
使用Jetty与Jersey建立Restful API Serv

使用Jetty与Jersey建立Restful API Serv

作者: BitInterfc | 来源:发表于2021-01-12 12:26 被阅读0次

    一、关于Jetty相关知识

    1、 什么是Jetty
    Jetty是一个开源HTTP服务器和Servlet殷勤,可以为JSP和Servlet提供Runtime。

    2、Jetty 特性

    • Jetty是异步的,支持更高的并发量
    • Jetty更加灵活轻量,更容易定制,资源利用率高
    • Jetty 默认采用NIO你续保费,能更好的支持长连接
    • 集成简单,只要集成Jetty,应用就可以快速支持Http服务

    3 和Tomcat相比

    • 比Tomcat架构更加简单,jetty所有组件基于Handler实现
    • Jetty更容易扩展第三方构架
    • 更加轻量,节省内存
    • 但是tomcat更加稳定成熟,在企业级中占有率很大

    4 Jetty应用场景

    • 默认使用NIO,所以在轻量级、保持长连接的场景还是很有用处。如何客户聊天

    4.1 AboutNIO

    5 Jetty 原理

    • Jetty的核心组件有Server和Connector两个组件构成
    • Server是基于Handler容器工作,类似Tomcat的Container容器工作
    • Connector负责接收客户端的链接请求,并将请求分配给一个处理队列去执行
    • Jetty是围绕Server类来构建,Server类继承了Handler,关联了Connector和Container
    • Jetty的Server的扩展主要是实现一个个Handler,并将Handler加入到Server中,Server中提供了调用Handler的访问规则

    5 Jetty启动过程

    • 入口是Server类,Server 类启动完成就代表Jetty能提供服务了
    • Server首先启动设置到自身的Handler,然后启动此handler链上的其他Handler,最后启动JMX的Mbean,启动Connector,打开请求端口

    6、jetty接收请求的步骤
    jetty默认是基于http协议的
    (1)Jetty 在启动时将会创建 BIO 的工作环境,它会创建 HttpConnection 类用来解析和封装 HTTP1.1 的协议

    (2)创建一个队列线程池,用于处理每个建立连接产生的任务

    (3)创建 ServerSocket,用于准备接受客户端的 socket 请求

    (3)创建一个或多个监听线程,用来监听访问端口是否有连接进来

    (4)当 ServerSocket 被执行时,HttpConnection 将被调用,它固定了如何将请求传递到 servlet 容器里,又如何将请求最终路由到目的 servlet

    (5)当 Jetty 接受到一个请求时,Jetty 就把这个请求交给在 Server 中注册的 Handler 去执行

    (6)Server 的 handle 的方法将请求代理给 ContextHandler 的 handle 方法,ContextHandler 又调用 HelloHandler 的 handle 方法

    二、使用Jetty + Jersey搭建Restful API Web Service

    //create server with port
    Server server = new Server(8080);
    //
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
    context.setContextPath("/");
    
    //add handler
    server.setHandler(context);
    
    ServletHolder holder1 = context.addServlet(ServletContainer.class, "/thresholdmgmt/0.8/*");
    
    
    // Tells the Jersey Servlet which REST service/class to load.
    holder1.setInitParameter(
              "jersey.config.server.provider.packages",
              "com.ibm.perfmgmt.thresholdservice.restapi"
    );
    
    try {
                server.start();
                server.join();
            }  catch (Exception e) {
                logger.info("Failed to start application: " + e);
            } finally {
                server.destroy();
            }
    
    
    

    相关文章

      网友评论

          本文标题:使用Jetty与Jersey建立Restful API Serv

          本文链接:https://www.haomeiwen.com/subject/vgvsaktx.html