Dof*_*ngo 1 servlets jersey servlet-filters jersey-2.0
我阅读了很多教程,但我不明白Servlet过滤器和Jersey过滤器之间的区别是什么。有人可以示范我吗?
在Servlet容器中,您有Servlet和Servlet过滤器。通常,Servlet处理请求的处理,而Servlet Filter处理请求的后处理。所以请求流看起来像
Request --> Filter --> Servlet --> Filter --> Response
Run Code Online (Sandbox Code Playgroud)
Jersey应用程序,它实现为Servlet 1。因此,在上述流程中,只需用Jersey替换“ Servlet”即可。
Request --> Filter --> Jersey-Servlet --> Filter --> Response
Run Code Online (Sandbox Code Playgroud)
泽西岛也有自己的过滤器,即ContainerRequestFilter和ContainerResponseFilter。仅在Jersey应用程序的上下文中,它们的作用与Servlet筛选器相同。它们用于预处理和后处理。以下流程仅在Jersey请求中。
Request --> ContainerRequestFilter --> Resource --> ContainerResponseFilter -> Response
Run Code Online (Sandbox Code Playgroud)
因此,这些过滤器在请求的预处理和后处理中具有相同的目的。主要区别在于它们的连接级别。Servlet过滤器在servlet级别绑定,而Jersey过滤器在Jersey级别绑定。
好吧,这取决于您何时调用它以及需要访问哪些信息。以安全为例。考虑保护应用程序安全时,您可能希望安全门尽可能远离数据。因此,您可以使用Servlet过滤器实现安全性。但是,您需要只能在Jersey应用程序中获取的信息,那么您将需要使用Jersey过滤器。例如,您需要知道调用哪个资源方法。您只能从ResourceInfoJersey过滤器内部获取此信息
Request --> Filter --> Servlet --> Filter --> Response
Run Code Online (Sandbox Code Playgroud)
您无法在Servlet过滤器中执行上述操作。此信息仅可从Jersey应用程序的上下文访问。也许您可能想在Servlet过滤器中处理身份验证,然后在身份验证之后将结果存储在HttpServletRequest属性中。然后在授权中,您可以在Jersey级别进行处理,如上所示。您可以将HttpServletRequest注入Jersey过滤器中,并从那里获取属性。
这只是一个例子。有很多用例。您只需决定要实现哪种过滤器类型,哪种才是最适合您的应用程序的。在大多数情况下,您可以使用Jersey过滤器,但是有时您需要尽可能早地在请求中调用过滤器,在这种情况下,您可能希望使用服务器过滤器。在其他情况下,您需要访问只能在Jersey应用程序中获取的信息。为此,您应该使用Jersey过滤器。
1.也可以将Jersey应用程序配置为作为Servlet过滤器而不是Servlet运行。我相信他们提供此选项的原因是,某些Jersey功能需要某些仅在Filter中提供的功能。
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |