Servlet与Filter的区别

57
ServletFilter有什么区别?您建议在对页面进行授权时使用哪一种?
3个回答

104

当您想要基于特定条件进行过滤和/或修改请求时,请使用Filter。当您想要控制、预处理和/或后处理请求时,请使用Servlet

Java EE 教程对过滤器(filters)有以下说明:

过滤器是一种可以转换请求或响应的头部和内容(或两者)的对象。过滤器与Web组件不同,因为过滤器通常不会自己创建响应。相反,过滤器提供可以“附加”到任何类型的Web资源的功能。因此,过滤器不应该对它作为过滤器而行动的Web资源有任何依赖关系;这样可以使其与多种类型的Web资源组合。

一个过滤器可以执行的主要任务如下:

  • 查询请求并根据需要采取行动。
  • 阻止请求和响应配对进一步传递。
  • 修改请求头和数据。通过提供自定义版本的请求来实现此操作。
  • 修改响应头和数据。通过提供自定义版本的响应来实现此操作。
  • 与外部资源交互。

对于授权,最适合的是Filter。以下是一个基本示例,演示了如何使用过滤器检查已登录用户的请求:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) {
        // User is not logged in. Redirect to login page.
        ((HttpServletResponse) response).sendRedirect("login");
    } else {
        // User is logged in. Just continue with request.
        chain.doFilter(request, response);
    }
}

21

筛选器最适用于授权。这是因为它们可以配置为运行站点的所有页面。因此,您只需要一个筛选器来保护所有页面。


所有页面=可能需要登录的页面。 - Asif Mushtaq

2
使用过滤器可以提高Servlet的性能--当请求到来时,我们可以在请求上进行预处理,如果请求满足条件,则可以将其转发到Servlet,否则向客户端提供适当的信息。保留HTML标签,不做解释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接