我们说管道机制给我们带来了更好的扩展性,Tomcat中在扩展性方面具体如何体现,这便是本节讨论的内容。从上节了解到基础阀门是必须执行的,假如你需要一个额外的逻辑处理阀门,可以添加一个非基础阀门。
我的需求是对每个请求访问进行IP记录,打印到日志里面,详细操作如下:
① 自定义一个阀门PrintIPValve,只要继承ValveBase并重写invoke方法即可,ValveBase是Tomcat抽象的一个基础类,它帮我们实现了生命接口及MBean接口,使我们只需专注阀门的逻辑处理即可。需要注意的地方是一定要执行调用下一个阀门操作,即执行getNext().invoke(request,response),否则运行时将出现错误,请求到这个阀门就停止往下处理。
public classPrintIPValve extends ValveBase{
@Override
publicvoid invoke(Request request, Response response) throws IOException,
ServletException{
System.out.println(request.getRemoteAddr());
getNext().invoke(request,response);
}
}
② 配置tomcat服务器配置server.xml,这里把阀门配到Engine容器下