Я пытаюсь отправить изображение клиенту из сервлета и добавить файл cookie, содержащий идентификатор изображения, в ответ.(я не хочу отображать одно и то же изображение более чем N раз).
Похоже, что Internet Explorer не заботится о файлах cookie, и я всегда получаю нулевую ссылку, когда вызываю request.getCookies ();,С Opera все работает отлично.
Chrome видит куки, но я получаю следующее исключение, когда записываю изображение в outputStream: ClientAbortException: java.net.SocketException: программно вызвано прерывание соединения: ошибка записи в сокет
Я еще не пробовал Мозиллу.
Есть ли обходной путь для Internet Explorer, кроме файлов cookie?Сеансы работают с моим Internet Explorer.
Есть ли какие-либо идеи для исключения, возникающего при использовании Chrome?(размер изображения меньше 1 МБ).
Вот код сервлета:
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();
}
}