如何转换 Tomcat 阀 (valve) 以便能与 GlassFish 一起工作?

GlassFish 中的 <code>org.apache.catalina.Valve</code> 界面与 Tomcat 不同。

它已经过更改以实现优化,这会使对管道 (pipeline) 的阀调用扁平化(因此也会使在处理 servlet 请求的过程中所需的栈帧扁平化):GlassFish Web 容器一次调用一个阀,然后通过检查当前阀调用的返回值来决定是否调用管道中的下一个阀,而不让一个阀调用管道中的下一个阀。

要使 Tomcat 阀适用于 GlassFish,需要进行以下更改:

  • 将阀的 <code>invoke()</code> 实现的签名从 <code>void</code> 更改为 <code>int</code>
  • 将每个
return;

替换为

return Valve.END_PIPELINE;
  • 将每个对
getNext().invoke(request, response);

的调用替换为

return Valve.INVOKE_NEXT;

然后将接下来的所有代码(即所有被执行(然后不再有效)的阀逻辑)移到此方法中:

public void postInvoke(Request request, Response response)
      throws IOException, ServletException;

英文