The servlet filter is only for the crawler and the crawler will not navigate your app using PlaceChangeEvents. The crawler just loads an URL that will hit your server and your servlet filter.
If the bot finds a hyperlink like "#!myPlace" then it calls your server using "http://domain.com/?_escaped_fragment_=myPlace" and thus hitting your server. If you have two servers (a dedicated web server for static content + application server) then you have to proxy the request to your application server as soon as the URL contains the _escaped_fragment_ query parameter, so that the server can generate a HTML snapshot on the fly or you have to pre-generate all possible snapshots and serve them directly from the dedicated web server (and update them regularly using a cron job).
Basically your server needs to follow the spec described at:
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To view this discussion on the web visit https://groups.google.com/d/msg/google-web-toolkit/-/eYSMCKNDl9YJ.
To post to this group, send email to firstname.lastname@example.org.
To unsubscribe from this group, send email to email@example.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.