一、Jetty的ScopedHandler的doStart方法,最后一步是将线程私有变量__outerScope设置成null,为什么需要这样做呢?
protected void doStart() throws Exception { try{ _outerScope=__outerScope.get(); if (_outerScope==null){ //本次处理的第一个scope handler //告知后续scope handler,_outerScope选我 __outerScope.set(this); } super.doStart(); _nextScope= getChildHandlerByClass(ScopedHandler.class); } finally { if (_outerScope==null){ //本次处理结束 //为了下次同一个线程处理是, //还能正常的设置第一个scope handler //必须把threadlocal变量设为null __outerScope.set(null); } } }
二、Jetty中,ScopedHandler中nextHandle调用顺序是如何的?
//此外,这一节里有一个non scoped handler X,一开始没太看懂调阅顺序。 //后来发现是这样的: public final void nextHandle(String target...)... { if (_nextScope!=null && _nextScope==_handler){ //上面条件可以保证下一个handler是scope handler _nextScope.doHandle(target,baseRequest,request, response); } else if (_handler!=null){ //non scpoe handler调用下一个handler的 super.handle(target,baseRequest,request,response); } } 感觉类成员的命名不太合适, 比如__outerScope和_outerScope 比如_handler其实一直指向的是下一个handler,是不是该为_nextHandler更好一些?