重构Invocation和ServletInvocation,分解为 面向ContextURI的FilterChainInvocation 和
面向 rawContextURI的HttpInvocation,
对于具有相同ContextURI的不同URL,其生成的FilterChain必定是相当的,故可以将FilterChain及相关的ContextURI信息(如ServletPath,PathInfo等)缓存起来,免去每次都是进行一次完整的Filter和Servlet的匹配,
故FilterChainInvocation是面向ContextURI是可缓存的,在并发情况也可共享的.
而HttpInvocation是面向rawContextURI(即带参数)的,在rawContextURI也是可缓存的
修改ForwardRequest,ErrorRequest,IncludeRequest的包
之前forward(),error()或include()方法,新的HttpInvocation信息会覆盖了旧的请求的HttpInvocation信息,就如include()方法返回到旧的请求中时,旧请求的HttpInvocation信息实际上是丢失了(被覆盖了).
现在利用装饰模式实现的ForwardRequest,ErrorRequest和IncludeRequest,新的HttpInvocation信息是存放在Wrapper里(ForwardRequest,ErrorRequest和IncludeRequest),新请求完成,返回到旧请求时,旧的HttpInvocation信息依然存在.
log优化
引入了FilterChainInvocation的缓存,取代原来的FilterChainEntry

 * FilterChainInvocation 是一个面向特定ContextURI的 FilterChain + Servlet 的调用
 * 
 * 对于不同的请求,如果ContextURI相同,则生成的FilterChainInvocation必定相同,所以FilterChainInvocation是是重用的和共享的,也可以根据ContextURI来缓存
 * 
 * 并发的情况下也是可重用的和共享的,像单例一般的重用.
 * 
 * 由于对一个新的ContextURI,要匹配多次才可以生成与其匹配的FilterChain和Servlet,所以对HttpInvocation作缓存的意义较大
重构Wrapper的请求的包和暂时先不实现NamedDispatcher(这个好像没什么用)
Update for HttpInvocation & FilterChainInvocation
Update for HttpInvocation & FilterChainInvocation,并且修复getRequestURI()的问题
Format Code
Build - JNettyRC2