Web框架应该是Filter还是Servlet?

时间:2011-02-24 20:31:26

标签: java servlets java-ee servlet-filters

让Web框架处理来自单个入口点的请求是一个已解决的问题。但是,单个入口点应该是Filter还是Servlet?为什么Web应用程序开发人员更喜欢一个?为什么框架开发人员更喜欢一个而不是另一个?

5 个答案:

答案 0 :(得分:10)

让我们看看现有框架是如何做到的:

这是最受欢迎的框架。还有更多,但大多数都使用Servlet。

大多数(如果不是所有)servlet都应该映射到后缀URL模式,例如*.jsf(JSF),*.html(Spring),*.do(Struts)等。这使开发人员能够轻松忽略不感兴趣的资源。因此,能够做到这一点的过滤器的优势消失了。只有Wicket过去需要在额外的路径/app/*上进行映射,并且在Wicket 1.3中将Servlet更改为Filter是唯一的参数,您只能在/*上映射它。 。但是,这会添加额外的配置样板,以便能够忽略静态资源。我个人不明白为什么他们不只是使用后缀映射。

所有Web框架都依赖于HTTP请求。在Servlet中,它已经在标准方法中直接可用(通常只使用service()方法)。在过滤器中,您需要将其强制转换(尽管这不一定非常昂贵)。

此外,Sun / Oracle基于以下理由在Filters和Servlet之间进行了明确的分离:当您想要在某些条件下过滤请求/响应时,请使用过滤器。当您想控制请求/响应和/或创建响应时,请使用Servlet。

另见:

答案 1 :(得分:0)

Web应用程序开发人员不应该真正关心它是过滤器还是servlet。开发人员应该只关心框架如何使开发更容易。

现在,我甚至会更进一步地说,Web框架甚至不必基于J2EE规范(根据Play Framework),其中规则已完全重写为使Java程序员更容易开发Web应用程序。

答案 2 :(得分:0)

根据个人经验过滤。我得出了这个结论,因为在过滤器中我可以决定是否需要处理请求。如果我不需要处理它,那么我可以让链做下一个过滤器。在一个servlet中,如果你决定不再继续处理那么你必须转发我发现没有那么好的工作。

答案 3 :(得分:0)

过滤器绝对是最佳选择。 Web框架将作为应用程序服务器中的Web应用程序运行。应用程序服务器将更好地处理某些资源,即图像和其他静态文件,而Web框架应处理对动态资源的调用。如果您创建一个可以将所有静态资源请求转发到应用程序服务器(或其他过滤器)的过滤器,则更容易实现。

答案 4 :(得分:-1)

检查this基准。你会发现Play!framework(基于Netty)+ Japid模板引擎几乎接近静态内容托管(即使并发用户增加)。