Tomcat 的过滤诀窍
2009-11-05 00:00:00 来源:WEB开发网核心提示: 兼容 Servlet 2.3 的容器允许过滤器在请求被处理(通过 Servlet 引擎) 以前以及请求得到处理 以后(过滤器将可以访问响应)访问 Web 请求, 在这些情况下,Tomcat 的过滤诀窍(2),过滤器可以:在请求得到处理以前修改请求的标题提供它自己的请求版本以供处理在请求处理以后和
兼容 Servlet 2.3 的容器允许过滤器在请求被处理(通过 Servlet 引擎) 以前以及请求得到处理 以后(过滤器将可以访问响应)访问 Web 请求。
在这些情况下,过滤器可以:
在请求得到处理以前修改请求的标题
提供它自己的请求版本以供处理
在请求处理以后和被传回给用户以前修改响应
先取得由容器进行的所有请求处理,并产生自己的响应
比过滤器的可用性更为重要的是,接入 J2EE 处理管道需要创建不可移植的、容器专用的和系统范围的扩展机制(如 Tomcat 3 拦截器)。
概念上的 Tomcat 过滤
不同于在 Apache、IIS 或 Netscape 服务器中能找到的熟悉的过滤机制,Servlet 2.3 过滤器并非建立在挂钩式函数调用上。事实上, Tomcat 4 级别的引擎架构脱离了传统的 Tomcat 3.x 版本。新的 Tomcat 4 引擎取代了在请求处理的不同阶段调用挂钩式方法的整体式引擎,它在内部使用了一系列的嵌套调用、包装请求及响应。不同的过滤器和资源处理器构成了一个链。
在传统架构中:
每次接受到请求,挂钩式方法就被调用,不论它们是否执行(有时甚至是空的)。
方法的作用域及并发关系(每个方法可能在不同的线程上被调用)不允许在处理相同的请求时简单、高效地共享不同挂钩式方法调用间的变量和信息。
在新架构中:
嵌套的方法调用通过一系列过滤器实现,它仅有应用于当前请求的过滤器组成;基于挂钩式调用的传统执行方式需要在处理短句中调用挂钩式例程,即使一个特定短句的处理逻辑不起任何作用。
局部变量在实际的过滤方法返回之前都作保留,并且可用(因为上游过滤器的调用总在堆栈上,等待后续调用的返回)。
更多精彩
赞助商链接