关于Jetty7 Continuation API的使用

由于Struts2的Action都继承自ActionSupport,客户端的每一次请求都会调用该类的execute方法并返回一个代表JSP页面的String,这是一种有求立即响应的模式.
而对于Continuation,如果资源比较耗时,没有准备好,则将当前request suspend到一个Queue中,并且不返回response(什么时候返回:在资源就绪时,异步通知,比如通过httpclient的onResponseComplete事件),然后将分配给请求的Servlet处理线程释放回线程池. 这是一种有求不立即响应的模式(何时构造Response返回内容给客户端由Server端根据远程请求决定).
由于这二种模式的差别,导致扩展Action,支持Continuation很难做到:Action实际上是对Servlet API的doGet,doPost进行了层层封装.对外暴露仅是execute方法.
解决的办法:
1.全部使用Servlet替代Struts2.但是由于现有项目已经使用struts2,并且页面大量使用struts的标签.改造工作量较大.只能做一个平衡,按照2/8原则对经常发送请求的20%做改造.
另外注意到struts2中的pause函数.
pause函数可以支持一个有意义的客户端与服务器之间的对话过程,而不是每次问答都是一个新的请求. 它支持多求一应的模式(其实是在execute方法中通过多次调用pause方法进行)
原文地址:https://www.cnblogs.com/highriver/p/1734349.html