Jetty(Api)

Servlet规范核心类(接口)

  ServletContext:定义了一些可以和Servlet Container交互的方法。
  Registration:实现Filter和Servlet的动态注册。
  ServletRequest(HttpServletRequest):对HTTP请求消息的封装。
  ServletResponse(HttpServletResponse):对HTTP响应消息的封装。
  RequestDispatcher:将当前请求分发给另一个URL,甚至ServletContext以实现进一步的处理。
  Servlet(HttpServlet):所有“服务器小程序”要实现了接口,这些“服务器小程序”重写doGet、doPost、doPut、doHead、doDelete、doOption、doTrace等方法(HttpServlet)以实现响应请求的相关逻辑。
  Filter(FilterChain):在进入Servlet前以及出Servlet以后添加一些用户自定义的逻辑,以实现一些横切面相关的功能,如用户验证、日志打印等功能。
  AsyncContext:实现异步请求处理。

HTTP消息

HTTP请求消息分为请求行、消息报头、请求正文三部分
HTTP响应消息分为状态行、消息报头、消息正文三部分

 

WebAppClassLoader

Jetty中用于对Servlet规范的ClassLoader的实现,它继承自URLClassLoader。它不会加载任何System Class(使用System ClassLoader加载),
对Java2中父ClassLoader优先于子ClassLoader的规则,可以使用WebAppContext的setParentLoadPriority为true来配置。
如果没有配置父ClassLoader,则使用当前的Thread Context ClassLoader,
如果该ClassLoader也为null,则使用加载该类的ClassLoader,
如果它还为null,则使用SystemClassLoader作为其父ClassLoader

 

XmlConfiguration

Jetty中用来实现使用XML文件配置WebAppContext实例的框架

 

Server

Jetty中最核心的是类,它即包含Connectors数据,有包含了Handler的集合,即
它是Jetty中用于连接Connector和Handler的类。

同时它还包含了一个Container,用于存储Jetty中核心类实例的关系发生变化时触发事件的Listener,
接收者可以注册一个Listener以获取Jetty中某个类的关系发生变化

 

Connector

  Connector收到一个客户端的连接时(ServerSocket或ServerSocketChannel的accept()方法返回),
  Connector会首先创建一个ConnectedEndPoint用于和连接的底层(Socket、Channel)打交道(读写数据),
  在创建的ConnectedEndPoint时会同时使用该EndPoint创建相应类型的Connection,
  然后会创建一个Task仍给线程池,最终线程池会启动一个线程启动这个Task,而在这个Task中调用Connection中的handle()方法,以处理当前的连接请求,
  在这个Task中,它会持续的调用Connection中的handle()方法直到连接关闭或Connector停止。
  在ConnectorEndPoint中,它自己就实现了Runnable接口,因而可以将它自己丢给线程池,而在SelectChannelEndPoint中则交给SelectorManager来管理客户端连接过来的Channel,并调用Connection的handle方法

 

Handler

Handler在使用Jetty时,我们首先要向Server注册相应的Handler实例. Server作为Handler的容器,
  在Server中以HttpConnection为参数的handle()和handleAsync()方法中,会调用向这个Handler容器中注册的所有Handler的handle()方法

 

Container

 Container用于生成父实例和子引用的关系发生变化时生成的时间,以提供其注册的Listener接收到相应的事件

 

Connector

Connector是核心接口,来抽象服务器对某个端口的监听。在Connector启动时,它会启动acceptors个Acceptor线程用于监听在Connector中配置的端口
    SelectChannelConnector
    BlockingChannelConnector

 

Buffer

Buffer是对Java中Stream IO中的buffer和NIO中的buffer的抽象表示,它主要用于缓存连接中读取和写入的数据
    ByteBuffer
    DirectNIOBuffer
    IndirectNIOBuffer
    RandomAccessFileBuffer
    View

    
EndPoint

EndPoint是对一次客户端到服务器连接的抽象,每一个新的连接都会创建一个新的EndPoint,并且在这个EndPoint中包含这次连接的Socket.
    StreamEndPoint
    ChannelEndPoint
    BlockingChannelEndPoint
    SelectChannelEndPoint
    SslSelectChannelEndPoint

 

Connection

Connection表示客户端和服务器的一次连接
    HttpConnection是对Connection的主要实现,它表示Http客户端和服务器的一次连接,用于将Request、Response、EndPoint联系在一起

 

Parser

Parser抽象请求消息和响应消息的解析类引擎
    HttpParser抽象HTTP请求消息和响应消息的解析类引擎,采用事件驱动机制,用户可以通过注册的EventHandler实例获取相应的消息.在HttpConnection中使用
    


Generator

Generator专门处理HTTP响应消息和请求消息的生成和发送
    HttpGenerator
    NestedGenerator

 

Handler

Handler是核心接口,它用于处理所有连接以外的逻辑,比如对Servlet框架的实现,以及用户自定义的Handler等,它继承自LifeCycle和Destroyable接口,只有一个主要方法:handle,包含Request和Response实例
    DefaultHandler
    DumpHandler
    ErrorHandler
    ErrorPageErrorHandler.
    ResourceHandler

HandlerWrapper是一个Handler的Wrapper
    ConnectHandler
    DebugHandler
    IPAccessHandler
    RequestLogHandler
    StatisticsHandler

ScopedHandler
    Handler设计更多的像是Chain Of Responsibility模式,它的处理逻辑只能从链头走到链尾,而没有返回的路程,引入ScopedHandler的目的就是用于解决这个问题

ContextHandler

继承自ScopedHandler,它是对一个Web Application的各种资源进行管理,并串联实现整个Servlet框架的类
    ServletContextHandler
    WebAppContext    

 

Resource是对静态资源的抽象

    URLResource
    FileResource
    JarResource
    JarFileResource
    BadResource

 

SimpleServer.java

QueuedThreadPool threadPool = new QueuedThreadPool(10, 4, 1000);
Server server = new Server(threadPool);

ServerConnector connector = new NetworkTrafficServerConnector(server);
connector.setSoLingerTime(-1);
connector.setPort(port + 1);
server.setConnectors(new Connector[] { connector });

WebAppContext bb = new WebAppContext();
bb.setServer(server);
bb.setContextPath(context);
bb.setWar("jettyapp/web/");
server.setHandler(bb);

//        ResourceHandler resource_handler = new ResourceHandler();
//        resource_handler.setDirectoriesListed(true);
//        resource_handler.setWelcomeFiles(new String[]{ "lire.html" });
//        resource_handler.setResourceBase("jettyapp/web");
//        server.setHandler(resource_handler);
    
server.start();
server.join();

 

转载于:https://my.oschina.net/igooglezm/blog/1559094

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值