Всем привет.
Использую 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);
}
}
Воть...
Подскажите выход из положения.
Если есть варианты других решений, опишите пожалуйста.