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

最佳答案

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

  • JSF:Servlet
  • Spring MVC:Servlet
  • Struts/Struts2:Struts1中的Servlet,Struts2中的Filter
  • Wicket:Servlet直到1.2,1.3之后过滤
  • Stripes:过滤器和Servlet
  • Echo:Servlet
  • Vaadin:Servlet

  • 那是最受欢迎的框架。还有更多,但大多数使用Servlet。
    大多数(如果不是全部)小服务程序都应该映射到后缀URL模式,例如*.jsf(JSF),*.html(Spring),*.do(Struts)等。这使开发人员可以轻松地忽略不感兴趣的资源。因此,能够做到这一点的过滤器的优势消失了。只有Wicket曾经需要映射到额外的路径/app/*上,而在Wicket 1.3中将Servlet更改为Filter是通过唯一的参数完成的,您可以将其仅映射到/*上。但是,这增加了额外的配置样板,以便能够忽略静态资源。我个人不理解为什么他们不仅仅使用后缀映射。
    所有Web框架都依赖HTTP请求。在Servlet中,它可以直接在标准方法中使用(通常只使用service()方法)。在过滤器中,您需要将其抛弃(尽管这不一定很昂贵)。
    此外,Sun/Oracle还基于以下理由对过滤器和Servlet进行了明显区分:当您想在特定条件下对过滤器请求/响应进行过滤时,请使用过滤器。当您想控制请求/响应和/或创建响应时,请使用Servlet。
    也可以看看:
  • Servlet vs Filter
  • Design Patterns web based applications
  • How to access static resources when mapping a global front controller servlet on /*
  • Difference between / and /* in servlet mapping url pattern
  • 07-28 01:20
    查看更多