Problemas de cookies con IE y Chrome (trabajando con java)

Estoy tratando de enviar una imagen al cliente desde un servlet y agregar una cookie que contiene la identificación de la imagen a la respuesta. (No quiero mostrar la misma imagen más de N veces).

Parece que a Internet Explorer no le importan las cookies y siempre obtengo una referencia nula cuando llamo a request.getCookies () ;. Con Opera todo funciona muy bien.

Chrome ve las cookies, pero obtengo la siguiente excepción cuando escribo la imagen en la salida Stream: ClientAbortException: java.net.SocketException: el software provocó la cancelación de la conexión: error de escritura del socket

Aún no he probado Mozilla.

¿Hay alguna solución para Internet Explorer, excepto las cookies? Las sesiones funcionan con mi Internet Explorer.

¿Alguna idea para la excepción planteada cuando uso Chrome? (la imagen tiene menos de 1 MB).

Aquí está el código del servlet:

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
response.setContentType("image/jpeg");
response.addHeader ("Content-Disposition", "attachment");
response.setHeader("Cache-Control", "no-cache,no-store,must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
HttpSession session = request.getSession();
String requestURI = request.getParameter("requestURI");
String resolution = request.getParameter("resolution");
Cookie[] cookies = request.getCookies();
try
{
if (cookies == null)
     coada = (new BannerChooser().Choose(1));
String filePath = null;
Iterator it = coada.iterator();
boolean found =false;
while ((!found) && it.hasNext())
{
    found = true;
    if (cookies!=null)
   for (int i = 0; i < cookies.length; i++)
       if ( Integer.parseInt(cookies[i].getValue()) == ((BannerNota)it.next()).getB().getId())
       {
           found = false;
           break;
       }
       if (found)
       {
           BannerNota bannerToDisplay = (BannerNota)it.next();
           Cookie cookie = new Cookie(bannerToDisplay.getB().getId().toString(),bannerToDisplay.getB().getId().toString());
           cookie.setMaxAge(60*60*24);
           cookie.setPath("/licenta");
           filePath = bannerToDisplay.getB().getPath();
           response.addCookie(cookie);
           break;
       }

}
filePath = "h:/program files/Workspace/licenta/WebRoot/" + filePath;
File f = new File(filePath);
byte[] b = new byte[(int)f.length()];
FileInputStream fis = new FileInputStream(f);
fis.read(b);
ServletOutputStream out  = response.getOutputStream();
out.write(b);
out.close();
}
catch (Exception e)
{
    e.printStackTrace();
}

}
Respuesta 1

Alguien sabe por qué invalidar debe ser llamado por el hilo de la interfaz de usuario? Al igual que en Java Swing, la función de repintado se puede invocar tanto con subprocesos que no son UI como con subprocesos UI. repintar está realizando una tarea muy similar a ...

Después de compilar mi código Java en Eclipse, recibí los siguientes mensajes de error: SLF4J: la ruta de clase contiene varios enlaces SLF4J. SLF4J: Enlace encontrado en [jar: file: / home / user1 / workspace / MC / lib / ...

Tengo curiosidad por saber cómo funciona Battlefield Heroes: es un juego jugable en su navegador web, y es mucho más complejo que el juego promedio de un navegador web. ¿Alguien sabe qué tecnología es ...

Estoy iniciando un proceso desde Java para ejecutar un comando para mí. Este proceso se ejecuta durante un tiempo y luego necesita una contraseña para continuar. Ahora sé que puedo escribir en la secuencia del proceso, pero yo ...