With Servlets you don't usually 'Push' the status of long running tasks to the client. Instead the client has to 'Pull' the data. This is because HTTP is a Request/Response cycle - Clients Request info, Server Responds with it. These cycles are intended to be short, and making them long can cause trouble by clogging the server with open connections.
How is pushing data that much different then watching a video?
This isn't just a J2EE thing. The HTTP protocol strictly defines how this works:
1. The client opens a connection to the server (usually port 80, 443, although others also work such as 8080, 8443 depending on the server).
2. The client opens a reply port to listen on.
3. The client sends an HTTP request to the server. That request includes the reply port number as part of its overhead.
4. The server, which has been listening for requests, accepts the request, dispatches it to back-end logic which generates response data.
5. The server sends the response data to the listening reply port on the client.
6. The client closes its connections to the server and renders the response (usually as a web page).
There are no long-term open connections. The connections remain only as long as it takes to service a request and receive a reply. The next request starts it all over again. No reply can be sent ("pushed") except in response to a request.