Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.servlet.Filter对性能的影响?_Java_Performance_Servlets_Servlet Filters - Fatal编程技术网

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

javax.servlet.Filter对性能的影响?,java,performance,servlets,servlet-filters,Java,Performance,Servlets,Servlet Filters,我想知道关于使用过滤器的成本是否存在任何硬数据? 例如,在使用servlet上的heritage共享行为还是使用过滤器之间 谢谢 安托万如果有人能发布硬数据,我会感到惊讶。即使他们这样做了,也很可能与您无关,因为数字将取决于过滤器中正在执行的操作。这也可能属于过早优化的范畴——除非你真的把事情搞砸了,否则这不可能有什么关系 我假设“heritage”意味着“heritage”,并说过滤器是一个更好的解决方案。您可以选择在配置中关闭和打开它们 过滤器是HTTP请求的装饰器或方面。既然这些都是受人尊

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

谢谢


安托万

如果有人能发布硬数据,我会感到惊讶。即使他们这样做了,也很可能与您无关,因为数字将取决于过滤器中正在执行的操作。这也可能属于过早优化的范畴——除非你真的把事情搞砸了,否则这不可能有什么关系

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

过滤器是HTTP请求的装饰器或方面。既然这些都是受人尊敬的、经过验证的、真实的模式,为什么它们对于servlet来说不是有用和安全的呢

我得说你的担心被夸大了


话虽如此,我不建议构建如此长、复杂的过滤器链,以至于性能确实成为一个问题。如果您执行压缩、日志记录、性能度量等操作,最终可能会遇到问题,并使用一系列过滤器。

没有任何可测量的内容,与您在过滤器中所做的实际工作相比,这是完全相形见绌的。甚至每次都不会创建新的过滤器实例,就像共享servlet一样

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


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

但是,如果您需要进行压缩、日志记录、性能度量等等,那么无论是在过滤器中实现还是在其他地方实现,都需要相同的时间。关于过滤器,我唯一不喜欢的部分是深层堆栈跟踪,但这是一种装饰,远远低于允许的堆栈调用深度。还有“移动部件太多”的问题(即配置开销)。@Thilo:在JavaEE6中,您可以不进行配置。因此,这个问题也解决了。EE6是一个很大的改进,因为XML消失了,但您仍然需要在某个地方进行配置(当然,通过注释,它对IDE和程序员更友好)。