这部分的内容也同上部分,在[url]http://www.huihoo.org/apache/tomcat/[/url]和tomcat的文档[url]http://jakata.apache.org/tomcat-docs/[/url]上已经讲得很清楚。我主要对其进行理解和消化,并从中总结一些东西来,为我所用。
这部分中最困难的是Pipeline部分,即数据流在各个容器中的传递,依靠的是Pipeline这个东西来来进行消息的传递的实现,这样也可以进行消息传递解偶,而且又可以随时加入Valve,具体即插即用的作用。这个Value有点性Servlet编程中的Filter,也就是类似Filter的功能,可以在需要的时候加入安全控制等功能。
这个Pipeline模式主要由三个接口来实现。Pipeline、Valve、ValveContext。
Pipeline主要实现管道功能,为Value提供运行起点,其invoke方法为管道的起点。
Value主要实现过滤器或拦截器的作用,其实现类也是具体的拦截者,当Valve实现具体的行为后,一般仍会调用Pipeline的invoke方法,将控制流交给Pipeline。
ValveContext主要为Value的正常运行提供一个平台,保存着所有的Value的一个引用,也是决定具体调用哪个Value的决定者,但一般情况下都是按顺序调用Value的invoke()方法。
Pipeline的接口如下:
Value的接口如下:
ValueContext的接口如下:
这部分中最困难的是Pipeline部分,即数据流在各个容器中的传递,依靠的是Pipeline这个东西来来进行消息的传递的实现,这样也可以进行消息传递解偶,而且又可以随时加入Valve,具体即插即用的作用。这个Value有点性Servlet编程中的Filter,也就是类似Filter的功能,可以在需要的时候加入安全控制等功能。
这个Pipeline模式主要由三个接口来实现。Pipeline、Valve、ValveContext。
Pipeline主要实现管道功能,为Value提供运行起点,其invoke方法为管道的起点。
Value主要实现过滤器或拦截器的作用,其实现类也是具体的拦截者,当Valve实现具体的行为后,一般仍会调用Pipeline的invoke方法,将控制流交给Pipeline。
ValveContext主要为Value的正常运行提供一个平台,保存着所有的Value的一个引用,也是决定具体调用哪个Value的决定者,但一般情况下都是按顺序调用Value的invoke()方法。
Pipeline的接口如下:
public interface Pipeline {
public Valve getBasic();
public void setBasic(Valve valve);
public void addValve(Valve valve);
public Valve[] getValves();
public void invoke(Request request, Response response)
throws IOException, ServletException;
public void removeValve(Valve valve);
}
Value的接口如下:
public interface Valve {
public String getInfo();
public void invoke(Request request, Response response,
ValveContext context)
throws IOException, ServletException;
}
ValueContext的接口如下:
public interface ValveContext {
public String getInfo();
public void invokeNext(Request request, Response response)
throws IOException, ServletException;
}