javax.servlet.Filter对性能的影响?

时间:2011-01-13 10:21:59

标签: java performance servlets servlet-filters

我想知道使用过滤器的成本是否存在任何硬数据? 例如,在servlet上使用legacy来共享行为还是使用过滤器?

谢谢,

安托

2 个答案:

答案 0 :(得分:13)

如果有人可以发布硬数据,我会感到惊讶。即使他们这样做,也很可能与您无关,因为数字将取决于过滤器中的操作。它也可能属于过早的优化类别 - 除非你真的搞砸了一些东西,否则它不太重要。

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

过滤器是HTTP请求的装饰器或方面。由于这些是备受推崇的,经过验证的模式,为什么它们对servlet的使用不会有用和安全?

我说你的担忧被夸大了。

话虽如此,我不建议构建如此长而复杂的过滤器链,性能确实成为一个问题。如果您执行压缩,日志记录,性能指标等操作,最终可能会出现问题,最终会产生十几个过滤器链。

答案 1 :(得分:3)

没有什么可衡量的,完全与您在过滤器中所做的工作相比相形见绌。甚至每次都没有创建过滤器的新实例,就像它们被共享的Servlet一样。

继承的最大优势是能够在运行时配置和编写(编译父类,并且只能有一个)。

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