什么是过滤器?
在Java Web编程中,过滤器(Filter)是一种用于拦截请求和响应的组件。它们主要用于执行以下操作:
- 在进入目标资源(如servlet或JSP页面)之前处理请求:例如,你可以使用过滤器来判断用户是否已经登录,如果没有登录,可以重定向到登录页面。
-
在离开目标资源后处理响应:例如,你可以使用过滤器来添加或修改响应头,或者压缩响应内容以节省带宽。
-
阻止请求访问目标资源:例如,你可以使用过滤器来阻止未经授权的请求访问敏感资源。
过滤器在web.xml配置文件中配置,并且可以指定多个过滤器形成一个过滤链。当请求到来时,Servlet容器会按照在web.xml中声明的顺序,依次调用过滤器的doFilter
方法。
这是一个简单的过滤器示例,该过滤器将记录每个请求的处理时间:
public class PerformanceFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化操作
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
long start = System.currentTimeMillis(); // 记录开始时间
chain.doFilter(request, response); // 传递请求和响应到下一个过滤器或目标资源
long end = System.currentTimeMillis(); // 记录结束时间
System.out.println("Request processing time: " + (end - start) + "ms"); // 打印处理时间
}
@Override
public void destroy() {
// 清理操作
}
}
在这个例子中,doFilter
方法首先记录了处理开始的时间,然后调用chain.doFilter
将请求和响应传递到下一个过滤器或目标资源,处理完后再记录结束的时间,并打印处理时间。