2011-01-13 80 views

回答

13

,我会感到惊讶,如果有人可以张贴硬数据。即使他们这样做,它最有可能与您无关,因为这些数字将取决于过滤器中正在执行的操作。它也可能陷入过早的优化范畴 - 除非你真的把事情搞得很糟糕,否则这很可能不重要。

我假设“遗产”的意思是“继承”,并说,过滤器是一个更好的解决方案。您可以选择将它们在配置中关闭和打开。

过滤器是用于HTTP请求的装饰器或方面。既然这些都是受到尊重的,经过验证的模式,为什么它们对servlet的使用没有用处和安全?

我想说你的担心是夸大的。

虽这么说,我不建议建立这样一个长期,复杂的过滤器链,业绩也成为一个问题。如果您进行压缩,日志记录,性能指标等,最终会出现问题,并最终形成一连串的过滤器。

+3

但是,如果您需要执行压缩,日志记录和性能指标等,无论是否使用过滤器或其他方式,都需要同一时间。我不喜欢过滤器的唯一部分是深层堆栈跟踪,但这是整型和低于允许的堆栈调用深度的方式。然后是“太多移动部件”问题(即配置开销)。 – Thilo

+0

@Thilo:您可以在Java EE 6中无需配置。因此,这也可以解决。 –

+0

EE6是一个很大的改进,因为XML消失了,但是你仍然需要在某个地方进行配置(当然注释是IDE和程序员友好的)。 – Thilo

3

没有什么可测量的,完全与您在过滤器中所做的实际工作相差无几。甚至没有每次创建过滤器的新实例,就像它们共享的Servlet一样。

与继承相比,最大的优势是能够在运行时进行配置和组合(父类编译进来,并且只能有一个)。

有一点要考虑的是,一个过滤器只能换一个请求:它可以前后(或代替)添加代码。在Servlet运行后,响应可能已经被提交。它不能将代码注入到请求处理的中间,这样可以正确定义回调到父类(或Servlet结束处的其他技术)中。这意味着一个Filter可能不适合某些任务。