第五章 Servlet容器

5.2 管道任務(wù)

Container 的 invoke 方法的調(diào)用實(shí)際就是調(diào)用 Pipeline 的 invoke 方法,Pipeline 包含了容器要執(zhí)行的任務(wù),一個(gè) valve 代表一個(gè)任務(wù),BaseValve是容器的核心任務(wù)。閥類似過濾器,執(zhí)行完成后會調(diào)用下一個(gè)閥,基礎(chǔ)閥總是在最后執(zhí)行。下面是本章 Pipeline 的實(shí)現(xiàn)

public class SimplePipeline implements Pipeline {
  // 構(gòu)造函數(shù)
  public SimplePipeline(Container container) {
    setContainer(container);
  }
  // Pipeline 屬性設(shè)置
  protected Valve basic = null;
  protected Container container = null;
  protected Valve valves[] = new Valve[0];
  // 成員變量的 getter 和 setter 方法
  ...
  public void setBasic(Valve valve) {
    this.basic = valve;
    ((Contained) valve).setContainer(container);
  }
  // 添加 Valve
  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;
    }
  }
  // Container 調(diào)用 invoke 方法執(zhí)行處理邏輯
  public void invoke(Request request, Response response) {
    // 調(diào)用第一個(gè) Valve
    (new SimplePipelineValveContext()).invokeNext(request, response);
  }

  // 本章的 ValveContext 實(shí)現(xiàn)
  protected class SimplePipelineValveContext implements ValveContext {
    protected int stage = 0;
    // 遍歷 Pipeline 的所有 Valve
    public void invokeNext(Request request, Response response) {
      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");  }
    }
  } 
}

5.5 Wrapper 應(yīng)用

  • ex05.pyrmont.core.SimpleLoader: SimpleLoader 負(fù)責(zé) Servlet 的類加載工作。
  • ex05.pyrmont.core.SimplePipeline : 如前所述
  • ex05.pyrmont.core.

4
4
4
4
4
4
4
4

4
4

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容