使用Web框架处理来自单个入口点的请求是一个已解决的问题。但是,该单入口点应该是Filter还是Servlet?为什么Web应用程序开发人员更喜欢另一个?为什么框架开发人员会优先选择一个?
最佳答案
让我们看看现有框架是如何做到的:
那是最受欢迎的框架。还有更多,但大多数使用Servlet。
大多数(如果不是全部)小服务程序都应该映射到后缀URL模式,例如
*.jsf
(JSF),*.html
(Spring),*.do
(Struts)等。这使开发人员可以轻松地忽略不感兴趣的资源。因此,能够做到这一点的过滤器的优势消失了。只有Wicket曾经需要映射到额外的路径/app/*
上,而在Wicket 1.3中将Servlet更改为Filter是通过唯一的参数完成的,您可以将其仅映射到/*
上。但是,这增加了额外的配置样板,以便能够忽略静态资源。我个人不理解为什么他们不仅仅使用后缀映射。所有Web框架都依赖HTTP请求。在Servlet中,它可以直接在标准方法中使用(通常只使用
service()
方法)。在过滤器中,您需要将其抛弃(尽管这不一定很昂贵)。此外,Sun/Oracle还基于以下理由对过滤器和Servlet进行了明显区分:当您想在特定条件下对过滤器请求/响应进行过滤时,请使用过滤器。当您想控制请求/响应和/或创建响应时,请使用Servlet。
也可以看看: