这部分的内容也同上部分,在http://www.huihoo.org/apache/tomcat/和tomcat的文档http://jakata.apache.org/tomcat-docs/上已经讲得很清楚。我主要对其进行理解和消化,并从中总结一些东西来,为我所用。

这部分中最困难的是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的接口如下:
[code:1]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);
}[/code:1]

Value的接口如下:
[code:1]public interface Valve {
    public String getInfo();
    public void invoke(Request request, Response response,
                       ValveContext context)
        throws IOException, ServletException;
}[/code:1]

ValueContext的接口如下:
[code:1]public interface ValveContext {
    public String getInfo();
    public void invokeNext(Request request, Response response)
        throws IOException, ServletException;
}[/code:1]
评论
发表评论

您还没有登录,请登录后发表评论