A servlet filter is a chunk of code that gets executed for every request (or response) that it is mapped to. For example, you might map a filter to all requests for URLs matching /private/* which checks whether the requester has logged in and is authorized to see the resource.
You can only map a URL to one Servlet. You can map a URL to multiple Filters. As stated above, this allows you to place code that is very common in a Filter and map which URLs you want it to apply to. You only write the code once. If you wanted this without Filters, you would have to put the same code or method call in each and every place you wanted and recompile.