Como tratar paginas con un tiempo mayor de procesamiento de lo normal con Spring Frameworks

Estoy haciendo upload de archivos y la informacion la estoy procesando directamente al servidor de base de datos y la pagina que hace la carga tarda tanto que el navegador dice que mi pagina a expirado miestras que el servidor de aplicaciones sigue procesando la informacion del archivo.
Tengo opciones para realizarlo pero aun no se cual de todas es la mas apropiada para el problema:
1.- Aumentar el tiempo de espera de peticiones de mi servidor de aplicaciones.
En este primer punto he intentado agregar atributos a los encabezados de las paginas jsp de mi vista.

response.setHeader("Cache-Control","no-cache"); //HTTP 1.1             
response.setHeader("Pragma","no-cache"); //HTTP 1.0            
response.setDateHeader ("Expires", -1);

Y no me funciono , lo otro que intentare es cambiar la configuracion de mi apache tomcat para que el tiempo de respuesta aumente(Esto sera lo ultimo que hare por que no lo creo conveniente)

2.- Crear una barra de desplazamiento que indique que se esta procesando la informacion y el porcentaje de lo ya realizado.
apenas lo estoy iniciando y no se por donde entrarle aqui es donde necesito la ayuda por que es lo que quisiera hacer funcionar.

Si tiene comentarios me seria de mucha ayuda o por donde buscarle.
Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

trabajos largos

Hay un patrón para este tipo de páginas. Si el problema es que recibes el archivo y luego lo procesas y el procesamiento es tardado, entonces no esperes hasta el fin del procesamiento para mostrar un resultado. Lo mejor es hacerlo de este modo:

- Recibes el archivo
- Muestras una página indicando que ya lo recibiste y se está procesando (puedes mostrar el progreso)
- En el server, procesas el archivo de manera asíncrona, en un hilo aparte, que reporte su progreso a algún listener
- En la página, con AJAX puedes preguntar al server acerca del progreso para actualizar el status, hasta terminar.

Imagen de avefenix_x

Algo similar.

Voy a realizar lo que me dices, pero antes dare un vistazo a este articulo Spring MVC 3.2 Preview: Introducing Servlet 3, Async Support Que me parece que a grandes razgos intenta hacer lo que me dijistes cuando implemente algunas de las funcionalidades la publicare.
Saludos

Imagen de mmjose26

Ticket.

Otra forma de resolverlo es regresarle al usuario inmediatamente un ticket. luego el usuario puede consultar el status de su carga con ese tiket.
con esto puedes resolver procesamiento masivo de archivos.

Saludos!

Imagen de avefenix_x

El problema resuelto pero aun que mas por hacer.

Bueno les comento que ya resolvi el problema de la siguiente manera.
Primero Se creo un metodo Asyncrono con las sigueintes caracteristicas en un bean de servicio:

@Service
public class Servicio{
/*Variable que llevar el porcentaje de proceso */
private Integer proceso;
public void setProceso(Integerproceso) {
        this.proceso = proceso;
}

public Integer getProceso() {
        return proceso;
}

 @Async
public void procesarDatos(parametros) {
..
/*Se actualia la variable de proceso*/
setProceso(valor);
..
}
}

Segunda parte en el controlador hay dos llamados , La que realiza la carga del archivo y el ajax que notifica el progreso de la tarea.

@Controller
public class WebProcces{

@Resource
private Servicio servicio;

@RequestMapping(value = "/proceso", method = {RequestMethod.GET,RequestMethod.POST})    
public String getPaginaInicial(@RequestParam Long parametro) {         
..
/*Se reciben los parametros y se ejecuta el servicio asycrono*/
servicio.procesarDatos(parametro) ;
/*Se responde al cliente  notificando que se esta ejecutando la tarea*/
..
}

/*El cliente pregunta cada cierto tiempo cual es le proceso de la tarea*/
@RequestMapping(value="info_proceso",method=RequestMethod.POST)  
        public @ResponseBody Integer  getStatus(){
            Integer val=servicio.getProceso();
            return val;  
     }
}

Al final el cliente verifica el proceso de la tarea Yo lo realize con jquery el codigo quedo mas o menos asi

$(function(){
   $("#progressbar").show();
   $("#progressbar").progressbar({value: 0});
   var uploadInfo = function getUploadInfo() {         
      $.ajax({                 
        url: 'info_proceso',
        type: "POST",
        cache: false,
        dataType: "json",
        async: false,
        success: function(msg){
                var val=parseInt(msg);
                $("#progressbar").progressbar({value: msg});                                                   
                if (parseInt(msg)==100){
                   clearInterval(uploadInfoHandle);                                                    
                   $("#forma").attr("action","gold_upload_info.action")
                  $("#forma").submit();
                }
        },
        error: function(msg){
        $("#progressbar").hide();
        clearInterval(uploadInfoHandle);                                               
                                                }
          });
         };            
        uploadInfoHandle = setInterval(uploadInfo, 2000);
        }
});

Para que funcione la @Async es necesario hacer lo siguiente en tu archivo de configuracion de spring.

<task:annotation-driven executor="myExecutor" />
<task:executor id="myExecutor" pool-size="5"/>

Lo demas ya es parte de tus necesidades.
Esto funciona de forma global solo falta hacer algo para que funcione a nivel de sesion.
Saludos cordiales.