La solución con este tipo de procesos tan largos no es hacer esperar al navegador a que termine el cómputo. Si tarda tanto lo ideal es hacerlo en background.
Da igual que programes en JSP o en cualquier otra tecnología o lenguaje. De este modo el flujo sería el siguiente:
- Se solicita la página al servidor, que puede tener un tiempo para ser procesada.
- En el servidor se genera una entrada en una tabla de la base de datos, como una cola de procesos, indicando las características del proceso que se debe ejecutar. Devuelve entonces un mensaje inmediatamente al usuario diciendo que el proceso se ha encolado.
- Existe una tarea programada que se ejecuta cada x tiempo. Esa tarea programada verifica si hay algún proceso en la cola.
- En caso que exista algún proceso, lo ejecuta... en el momento que termina, le manda una señal al usuario, que puede ser un correo electrónico, indicando cómo puede acceder al resultado del ejecución de ese proceso.
Este flujo es más optimizado y menos susceptible de errores.