Forzar diálogo Guardar Como en JSPs

1
36814

Tareas Comunes en JSP

He recibido algunos correos preguntando como realizar algunas tareas comunes
con JSPs y servlets (recordar que al fin y al cabo son lo mismo)

Vamos a contar un par de ellas.

En este caso más que un tutorial es un recordatorio…..

Forzar el nombre de un fichero descargado

Cuando nuestros servlet o JSPs generan dinámicamente un fichero, normalmente
queremos especificar el nombre…. es más, probablemente nos interese  que nos
aparezca una ventana pidiéndonos que hacer con el fichero…..

Si vemos en siguiente ejemplo

<%@page contentType=»application/vnd.ms-excel»%>
<%

for (int i=0 ; i<20; i++)
{
    for(int j=0;j<10;j++)
    {
        out.write(i+j + «\t» );
    }
    out.write(«\n»);
}
%> 

Genera la siguiente respuesta:

Si queremos asignar un nombre al fichero, solo tenemos que
añadir una línea (la gracia está en que esta línea hace lo correcto con
Internet Explorer 6):

response.setHeader(«Content-Disposition»,»attachment; filename=\»»+ nombre + «\»»);

<%@page contentType=»application/vnd.ms-excel»%>
<%

String nombre = «fichero.csv»;
response.setHeader(«Content-Disposition»,»attachment; filename=\»»+ nombre + «\»»);

for (int i=0 ; i<20; i++)
{
    for(int j=0;j<10;j++)
    {
        out.write(i+j + «,» );
    }
    out.write(«\n»);
}
%> 

Y vemos que aparece un ventana solicitándonos que hacer con el
fichero…

Si queréis encontrar el por qué, podéis ir a la RFC donde nos
explica el detalle  http://www.ietf.org/rfc/rfc1806.txt

Si queremos que no aparezca el dialogo podemos cambiar attachment
por inline….. aunque en explorer 6 me
ignora el nombre del fichero.

 

Anular el Caché Intermedio

En las páginas HTML podemos especificar etiquetas para hacer que el
navegador o sistemas intermedios  no se cacheen la página.

<META HTTP-EQUIV=»Cache-Control»
content=»no-cache»>

<META HTTP-EQUIV=»Pragma»
CONTENT=»no-cache»>

<META HTTP-EQUIV=»Expires» CONTENT=»0″>

Pero en Explorer (según versiones) he encontrado problemas y si no se pone
en la cabecera (la que no se ve), no tiene efecto….

response.setHeader(«Cache-control»,»no-cache»);

response.setHeader(«Pragma»,»no-cache»);

response.setDateHeader («Expires», 0);

 

No olvidéis que vosotros también podéis colaborar en este web
…………..

Sobre el
Autor ..

1 Comentario

  1. Hola, buen ejemplo pero tengo una duda, en lugar de querer crear un archivo, como se puede hacer para que busque un archivo existente y lo descargue/guarde/copie/etc.? Saludos

Dejar respuesta

Please enter your comment!
Please enter your name here