Показать сообщение отдельно
  #1 (permalink)  
Старый 01.01.2012, 22:20
Новичок на форуме
Отправить личное сообщение для psarum Посмотреть профиль Найти все сообщения от psarum
 
Регистрация: 01.01.2012
Сообщений: 6

Преобразовать поток в картинку при обновление капчи
Всем привет.
Использую JSP c javascript.
В моём проекте есть форма авторизации с капчой.
Задача - сделать обновление капчи средствами AJAX, то есть без обновления страницы.
Проблема возникает при попытке преобразовать потоковый ответ сервера в картинку.
Итак
На клиенте кнопочка обновления капчи вызывает:
function getCaptcha() {
            var params = 'id=' + Math.random();
            http.open("POST", "CaptchaServlet", true);
            http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            http.setRequestHeader("Content-length", params.length);
            http.setRequestHeader("Connection", "close");
            http.onreadystatechange = function () {
                if (http.readyState == 4 && http.status == 200) {
                    var my_image = http.responseText;
                    alert(my_image);
                    document.getElementById('captchaImg').src = "data:image/jpeg;base64," + my_image;
                }
            };
            http.send(params);


Алерт исправно выдаёт ответ сервера, то есть сервер картинку отдаёт.

на сервере данный запрос обрабатывает сервлет с кодом:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            Captcha captcha = new Captcha.Builder(200, 50).addText(new DefaultTextProducer()).gimp(new DropShadowGimpyRenderer()).build();
            response.setHeader("Cache-Control", "no-store");
            response.setHeader("Pragma", "no-cache");
            response.setDateHeader("Expires", 0);
            response.setContentType("image/jpeg");
            CaptchaServletUtil.writeImage(response, captcha.getImage());
            request.getSession().setAttribute("CorrectAnswer",captcha.getAnswer());
        } catch (Exception e) {
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
        }
    }



Воть...
Подскажите выход из положения.
Если есть варианты других решений, опишите пожалуйста.
Ответить с цитированием