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++) |
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»; for (int i=0 ; i<20; i++) |
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» <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
…………..
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