Jetty学习【三】 Handler

本文介绍了Jetty中的Handler概念,包括其在产生HTTP响应、检查和修改请求以及调用其他Handler中的作用。接着,讨论了Jetty提供的不同Handler类型,并详细阐述了Handler的调用路径和具体执行步骤。
摘要由CSDN通过智能技术生成

1、什么是Handler

先来看看javadoc中对Handler的描述

/* ------------------------------------------------------------ */
/** A Jetty Server Handler.
 * 
 * A Handler instance is required by a {@link Server} to handle incoming
 * HTTP requests.  A Handler may: <ul>
 * <li>Completely generate the HTTP Response</li>
 * <li>Examine/modify the request and call another Handler (see {@link HandlerWrapper}).
 * <li>Pass the request to one or more other Handlers (see {@link HandlerCollection}).
 * </ul>
 * 
 * Handlers are passed the servlet API request and response object, but are 
 * not Servlets.  The servlet container is implemented by handlers for 
 * context, security, session and servlet that modify the request object 
 * before passing it to the next stage of handling.
 * 
 */
public interface Handler extends LifeCycle, Destroyable

也就是说,当一个HTTP请求到来的时候,需要Handler进行处理,而且必须要有一个Handler否则消息无法处理。Handler主要有以下几个功能:

1)产生HTTP Response

2)检查和修改request,并且调用其他Handler。之前已经介绍过,HandlerWrapper可以将多个Handler连接起来使用。

3)将request传递给其他的一个或者多个Handler。

现在知道了Handler的大致功能,接下来看看Jetty中实现了哪些Handler可以供开发者使用。

2、现有的Handler



在来回顾下之前的两篇文章中已经提到的Handler,

1)DefaultHandler,用于返回默认的错误页面404
2)ContextHandler,可以设置web应用的context
3)WebAppContext,可以设置web应用的context,用于加载和处理已有的web工程。
4)ServletContextHandler,可以设置web的context,同时可以添加servlet用于处理http request。
5)ResourceHandler,用于加载本地资源并且显示
之外还有HandlerWrapper,HandlerCollection,ContextHandlerCollection,HandlerList。

3、Handler调用路径

首先可以确认的是Server中的handle是调用Handler的入口,那么我们以这个函数为线索一步一步找出Handler是如何被调用的。
1)看一下handle函数是如何被调用的



2)查看handleRequest是如何被调用的


3)查看handle是如何被调用的


4)查看handle是如何被调用的


可以看出是在一个线程中被调用的,那么找出这个线程,


5)查看_handler是如何被调用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值