With filters you can use the
Chain of Responsibility pattern whereas I do not think this could be accomplished with the listener.
The filters' implementation of Chain of Responsibility allows you to wrap the request or response using the
Decorator pattern. This is something else that the listener does not allow you to do.
Oh, and I think the listener can only be run when a request is created or destroyed. This means it can not be configured to run during a forwarding of a request - but as I recall it is possible to configure listeners to run on any of the different kinds of dispatching on a request.