Servlet vs Filter

ServletFilter有什么区别? 你build议用什么来授权页面?

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

Java EE教程提到了有关filter的以下内容:

filter是可以转换请求或响应的头部和内容(或两者)的对象。 filter不同于Web组件,因为filter通常不会自己创build响应。 相反,filter提供的function可以“附加”到任何种类的networking资源。 因此,一个filter不应该依赖于它作为一个filter的Web资源。 这种方式可以由多种types的networking资源组成。

filter可以执行的主要任务如下:

  • 查询请求并采取相应措施。
  • 阻止请求和响应对进一步传递。
  • 修改请求标头和数据。 您可以通过提供该请求的自定义版本来执行此操作。
  • 修改响应标头和数据。 您可以通过提供自定义版本的响应来实现这一点。
  • 与外部资源进行交互。

对于授权, Filter是最适合的。 以下是filter如何检查login用户请求的基本开局示例:

 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); } } 

filter最适合授权。 这是因为它们可以configuration为运行网站的所有页面。 所以你只需要一个filter来保护你的所有页面。

使用filter我们可以提高servlet的性能 – 当请求到时,我们可以根据请求执行预处理,如果请求满足,我们可以转发到servlet,否则给客户端提供消息提供适当的信息。