Tomcat4 简单wrapper责任链
TOMCAT4容器的责任链
public class SimplePipeline implements Pipeline { public SimplePipeline(Container container) { setContainer(container); } protected Valve basic = null; protected Container container = null; protected Valve valves[] = new Valve[0]; public void addValve(Valve valve) { if (valve instanceof Contained) ((Contained) valve).setContainer(this.container); synchronized (valves) { Valve results[] = new Valve[valves.length +1]; System.arraycopy(valves, 0, results, 0, valves.length); results[valves.length] = valve; valves = results; } } public void invoke(Request request, Response response) throws IOException, ServletException { (new SimplePipelineValveContext()).invokeNext(request, response); } protected class SimplePipelineValveContext implements ValveContext { protected int stage = 0; public void invokeNext(Request request, Response response) throws IOException, ServletException { int subscript = stage; stage = stage + 1; if (subscript < valves.length) { valves[subscript].invoke(request, response, this); } else if ((subscript == valves.length) && (basic != null)) { basic.invoke(request, response, this); } else { throw new ServletException("No valve"); } } }}