Jetty7发布了,Jetty7支持servlet 2.5,且对Jetty6做了很大的重构,使之更合理更高效。
Jetty的Http异步处理模式,包括Jetty HttpClient(异步的HttpClient),Jetty Continuation(异步的Http Request/Respoinse),都是很吸引人的技术,有很多很好的应用,比如在线聊天室,实时股票行情表,异步Ajax代理等等,都可以用Jetty的异步处理模式来实现。
趁Jetty7的到来,赶紧享受一下这道技术美味。
Jetty Continuation 实际上是一种异步Http技术,他能让Http连接挂起,直到超时或者异步事件发生时,Http连接可以恢复。
Jetty Continuation 的技术应用起来不复杂,有几个关键的API,和两种设计模式:
API:
(1) 得到Continuation
Continuation continuation = ContinuationSupport.getContinuation(request);
(2) 挂起Http请求
void doGet(HttpServletRequest request, HttpServletResponse response)
{
...
continuation.setTimeout(long); // 可选:设置continuation 超时
continuation.suspend();
...
}
(3) 恢复Http连接,一旦异步事件发生了,可以通过异步事件的回调函数来恢复Http连接
void myAsyncCallback(Object results)
{
continuation.setAttribute("results", results);
continuation.resume();
}
(4) 完成Http连接,通常用在异步事件回调函数里返回Http Response时:
void myAsyncCallback(Object results)
{
writeResults(continuation.getServletResponse(), results); // 将异步事件结果
result,通过Response返回客户端
continuation.complete();
}
(5)监听continuation事件
void doGet(HttpServletRequest request, HttpServletResponse response)
{
...
Continuation continuation = ContinuationSupport.getContinuation(request);
continuation.addContinuationListener(new ContinuationListener()
{
public void onTimeout(Continuation continuation) { ... } // 超时事件
public void onComplete(Continuation continuation) { ... } // 完成事件
});
continuation.suspend();
...
}
两种设计模式:Suspend/Resume模式,Suspend/Continue模式:
(1) Suspend/Resume模式:
void doGet(HttpServletRequest request, HttpServletResponse response)
{
// 如果我们需要异步方式得到一个result,并放入request中
Object results = request.getAttribute("results");
if (results==null) // 如果异步处理尚未返回结果
{
final Continuation continuation = ContinuationSupport.getContinuation(request);
// 判断是否超时
if (continuation.isExpired())
{
// 返回超时Response
sendMyTimeoutResponse(response);
return;
}
// 挂起HTTP连接
continuation.suspend();
// 注册一个异步事件处理器
myAsyncHandler.register(new MyHandler()
{
// 异步事件
public void onMyEvent(Object result)
{
continuation.setAttribute("results", results); // 传送results
continuation.resume(); // 恢复连接
}
});
return; // or continuation.undispatch();
}
// 连接恢复后返回结果
sendMyResultResponse(response,results);
}
(2)Suspend/Continue模式:
void doGet(HttpServletRequest request, HttpServletResponse response)
{
final Continuation continuation = ContinuationSupport.getContinuation(request);
// 判断是否超时
if (continuation.isExpired())
{
// 返回超时Response
sendMyTimeoutResponse(response);
return;
}
// 挂起HTTP连接
continuation.suspend(response); // response被包装
// 注册一个异步事件处理器
myAsyncHandler.register(new MyHandler()
{
// 异步事件
public void onMyEvent(Object result)
{
sendMyResultResponse(continuation.getServletResponse(), results); // 通过response返回results
continuation.complete(); // 完成
}
});
}
}
分享到:
相关推荐
jetty-continuation-7.4.2.v20110526.jar jetty 服务jar包
赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106-javadoc.jar; 赠送源代码:jetty-continuation-8.1.8.v20121106-sources.jar; 赠送Maven依赖信息文件:...
赠送jar包:jetty-continuation-8.1.8.v20121106.jar; 赠送原API文档:jetty-continuation-8.1.8.v20121106-javadoc.jar; 赠送源代码:jetty-continuation-8.1.8.v20121106-sources.jar; 赠送Maven依赖信息文件:...
Jetty cometd(Continuation)学习笔记,自己用的,别人那down的网页
java运行依赖jar包
jetty8以及依赖包,学习的好代码,包括NIO和servlet的实现等
java运行依赖jar包
Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立...
java运行依赖jar包
Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立...
java运行依赖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....
jetty7.4.2下载,发布于20110526
java运行依赖jar包
Jetty是一个提供HHTP服务器、HTTP客户端和javax.servlet容器的开源项目。大家可以理解为何tomcat作用一样都是一个web容器
·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、...
·本文档为双语同时展示,一行原文、一行译文,可逐行对照,避免了原文/译文来回切换的麻烦; ·有原文可参照,不再担心翻译偏差误导; ·边学技术、边学英语。 ·只翻译了该翻译的内容,如:注释、说明、描述、...
Jetty 是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立...
jetty相关所有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.v20140411