Pessoal,
Tenho um jsp que utiliza um javascript (slidesUpdate) para carregar umas imagens do servidor e colocá-las dentro de um html em divs.
Quando abro essa página, ele trava e não consegue carregar todas imagens, mas quando fecho o browser e abro novamente ele carrega.
Alguém tem uma idéia de qual é o problema?
O jsp é o seguinte:
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@page import="java.io.FileFilter"%>
<%@page import="java.io.File"%>
<%@page import="java.util.ResourceBundle"%>
<%@page import="java.sql.Timestamp"%>
<%@page import="br.com.cpqd.www.projeto.comm.PresentationManager"%>
<%@page import="br.com.empresa.www.projeto.domain.Presentation"%>
<%@page import="br.com.empresa.www.projeto.domain.HistoryEntry"%>
<%@page import="br.com.empresa.www.projeto.domain.User"%>
<%@page import="br.com.empresa.www.projeto.persistence.DAO"%>
<%@page import="br.com.empresa.www.projeto.persistence.DAOFactory"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
int slidesCount = 0;
ResourceBundle msgs = ResourceBundle.getBundle("br.com.empresa.www.projeto.Messages", request.getLocale());
ResourceBundle bundle = ResourceBundle.getBundle("br.com.empresa.www.projeto.dmdweb_config");
Presentation p = null;
String presentationURL = null;
long id = Long.parseLong(request.getParameter("presentationID"));
Long hid = null;
try {
DAO dao = DAOFactory.getDAOInstance(DAOFactory.PRESENTATION_DAO, request.getLocale());
p = (Presentation) dao.getObject(id);
try {
HistoryEntry h = new HistoryEntry();
h.setPresentationID(new Long(id));
h.setUserID(((User) ((HttpServletRequest) request).getSession().getAttribute("user")).getId());
h.setStartTime(new Timestamp(System.currentTimeMillis()));
DAO histDao = DAOFactory.getDAOInstance(DAOFactory.HISTORY_DAO);
histDao.createObject(h);
hid = h.getId();
} catch(Exception e) {
System.out.println("Error while processing history information: " + e);
e.printStackTrace();
}
if(p.getPresentationType().equals(Presentation.LIVE_PRESENTATION)) {
slidesCount = new File(p.getPath(), "slides").listFiles(new FileFilter() {
public boolean accept(File file) {
return file.getName().toLowerCase().endsWith(".jpg") ||
file.getName().toLowerCase().endsWith(".png");
}//accept
}).length;
String baseUrl = bundle.getString("presentation.base.url");
String baseDir = bundle.getString("presentation.directory");
String presentationDir = p.getPath().getAbsolutePath().substring(baseDir.length());
presentationDir.replace('\\', '/'); //in case this is running on windows
if(!presentationDir.endsWith("/")) {
presentationDir = presentationDir + "/";
}
if(!(presentationDir.startsWith("/") || (baseUrl.endsWith("/")))) {
presentationURL = baseUrl + "/" + presentationDir;
} else {
presentationURL = baseUrl + presentationDir;
}
br.com.cpqd.www.dmd.comm.PresentationManager.setLastAccessTime(id, new Long(System.currentTimeMillis()));
}
} catch(Exception e) {
System.out.println("Error while processing presentation information: " + e);
e.printStackTrace();
}
String uname = null;
try {
uname = ((User) request.getSession(false).getAttribute("user")).getUsername();
} catch(Exception e) {
uname = null;
}
%>
<html>
<head>
<title><%= (p != null ? p.getTitle() : "") %></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"/>
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE"/>
<link rel="stylesheet" type="text/css" href="<%= request.getContextPath() %>/jsp/dmdweb.css" title="DMD Stylesheet" />
<script language="javascript">
<!--//
var bullet = false;
var needBullet = false;
var blinkCount = 10;
var req;
var reqID = 0;
var lastMsgID = 0;
var postReq;
var readyToSend = 1;
var cached = 0;
var cachedData = "";
var newSlidesDivCount = 0;
var caretPos = null;
var username = '<%= uname %>';
var slidesCount = <%= slidesCount %>;
function adjustImgSize(imgId) {
var image = document.getElementById(imgId);
var winW = document.body.clientWidth;
document.getElementById(imgId + "_div").style.display = 'block';
if(image.width != winW) {
image.height = image.height * (winW / image.width);
image.width = winW;
}
}
function exitPresentation() {
document.getElementById('exitPresentationForm').submit();
for(var i = 0; i < 1000000; i++) {
var a = i * i;
}
}
function blinkBullet() {
if(blinkCount >= 0) {
if(bullet) {
if((blinkCount % 2) == 0) {
document.getElementById("chat_bullet").src = '../images/bullet.png';
document.getElementById("chat_title_bullet").src = '../images/bullet.png';
} else {
document.getElementById("chat_bullet").src = '../images/no_bullet.png';
document.getElementById("chat_title_bullet").src = '../images/no_bullet.png';
}
blinkCount--;
setTimeout('blinkBullet()', 500);
} else {
document.getElementById("chat_bullet").src = '../images/no_bullet.png';
document.getElementById("chat_title_bullet").src = '../images/no_bullet.png';
}
}
}
function setBullet(b) {
bullet = b;
if(b == true) {
blinkCount = 10;
blinkBullet();
} else {
document.getElementById("chat_bullet").src = '../images/no_bullet.png';
document.getElementById("chat_title_bullet").src = '../images/no_bullet.png';
}
}
function setChatVisible(v) {
if(v == 1) {
document.getElementById("chat_div").style.display = 'block';
document.getElementById("closed_chat_div").style.display = 'none';
needBullet = false;
document.getElementById('chat_msg').blur();
document.getElementById('chat_msg').focus();
} else if(v == 0) {
document.getElementById("chat_div").style.display = 'none';
document.getElementById("closed_chat_div").style.display = 'block';
needBullet = true;
}
}
function replaceAll(str, s1, s2) {
while(str.indexOf(s1) >= 0) {
str = str.replace(s1, s2);
}
return str;
}
function htmlfy(str) {
str = replaceAll(str, 'ã', 'ã');
str = replaceAll(str, 'õ', 'õ');
str = replaceAll(str, 'á', 'á');
str = replaceAll(str, 'é', 'é');
str = replaceAll(str, 'Ã', 'í');
str = replaceAll(str, 'ó', 'ó');
str = replaceAll(str, 'ú', 'ú');
str = replaceAll(str, 'ý', 'ý');
str = replaceAll(str, 'â', 'â');
str = replaceAll(str, 'ê', 'ê');
str = replaceAll(str, 'ô', 'ô');
str = replaceAll(str, 'î', 'î');
str = replaceAll(str, 'û', 'û');
str = replaceAll(str, 'ç', 'ç');
str = replaceAll(str, 'Ã ', 'à');
str = replaceAll(str, 'è', 'è');
str = replaceAll(str, 'ì', 'ì');
str = replaceAll(str, 'ò', 'ò');
str = replaceAll(str, 'ù', 'ù');
str = replaceAll(str, 'Ù', 'Ù');
str = replaceAll(str, 'Ã’', 'Ò');
str = replaceAll(str, 'ÃŒ', 'Ì');
str = replaceAll(str, 'È', 'È');
str = replaceAll(str, 'À', 'À');
str = replaceAll(str, 'ä', 'ä');
str = replaceAll(str, 'ë', 'ë');
str = replaceAll(str, 'ï', 'ï');
str = replaceAll(str, 'ö', 'ö');
str = replaceAll(str, 'ü', 'ü');
str = replaceAll(str, 'Ü', 'Ü');
str = replaceAll(str, 'Ö', 'Ö');
str = replaceAll(str, 'Ã', 'Ï');
str = replaceAll(str, 'Ë', 'Ë');
str = replaceAll(str, 'Ä', 'Ä');
str = replaceAll(str, 'ÿ', 'ÿ');
str = replaceAll(str, 'ñ', 'ñ');
str = replaceAll(str, 'Ñ', 'Ñ');
str = replaceAll(str, 'Ã', 'Ã');
str = replaceAll(str, 'Õ', 'Õ');
str = replaceAll(str, 'Ã', 'Á');
str = replaceAll(str, 'É', 'É');
str = replaceAll(str, 'Ã', 'Í');
str = replaceAll(str, 'Ó', 'Ó');
str = replaceAll(str, 'Ú', 'Ú');
str = replaceAll(str, 'Ã', 'Ý');
str = replaceAll(str, 'Â', 'Â');
str = replaceAll(str, 'Ê', 'Ê');
str = replaceAll(str, 'Ô', 'Ô');
str = replaceAll(str, 'ÃŽ', 'Î');
str = replaceAll(str, 'Û', 'Û');
str = replaceAll(str, 'Ç', 'Ç');
str = replaceAll(str, '¨', '¨');
str = replaceAll(str, '§', '§');
str = replaceAll(str, 'ª', 'ª');
str = replaceAll(str, 'º', 'º');
str = replaceAll(str, '°', '°');
str = replaceAll(str, '´', '´');
str = replaceAll(str, ' ', ' ');
str = replaceAll(str, '<', '<');
str = replaceAll(str, '>', '>');
str = replaceAll(str, '/', '⁄');
str = replaceAll(str, '\"', '"');
str = replaceAll(str, '\'', ''');
str = replaceAll(str, '@', '@');
str = replaceAll(str, '\\', '\');
str = replaceAll(str, '$', '$');
str = replaceAll(str, '=', '=');
str = replaceAll(str, '?', '?');
str = replaceAll(str, ':', ':');
str = replaceAll(str, '`', '`');
str = replaceAll(str, '^', '^');
str = replaceAll(str, '~', '~');
str = replaceAll(str, '%', '%');
return str;
}
function checkUnwantedCR(textarea) {
if((textarea.value.charCodeAt(0) == 13) &&
((textarea.value.length == 1) || ((textarea.value.length == 2) &&
(textarea.value.charCodeAt(1) == 10)))) {
textarea.value= "";
}
}
function processKey(evt) {
checkUnwantedCR(document.getElementById('chat_msg'));
if(! evt.shiftKey) {
if(evt.keyCode == 13) {
var msg = document.getElementById('chat_msg').value;
postMsg(htmlfy(msg));
document.getElementById('chat_msg').value = "";
}
}
return true;
}
function postMsg(msg) {
msg = replaceAll(msg, '&', '%26');
msg = replaceAll(msg, '+', '%2B');
msg = replaceAll(msg, '#', '%23');
if(readyToSend == 1) {
readyToSend = 0;
if (window.XMLHttpRequest) {
postReq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
postReq = new ActiveXObject("Microsoft.XMLHTTP");
}
var data = 'AC=2&presentationID=' + <%= p.getId() %> + '&question=' + msg + '&username=' + username;
postReq.open("POST", '<%= request.getContextPath() %>/ChatServlet', true);
postReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
postReq.onreadystatechange = postCallback;
postReq.send(data);
} else {
if(cached == 0) {
cachedData += msg;
cached = 1;
} else {
cachedData += '\n' + msg;
}
}
}
function postCallback() {
if(postReq.readyState == 4) {
readyToSend = 1;
if(cached == 1) {
postMsg(cachedData);
cached = 0;
cachedData = "";
}
}
}
function getChatMessages() {
var url = "<%= request.getContextPath() %>/ChatServlet?AC=4&presentationID=<%= id %>&reqID=" + reqID + "&msgID=" + lastMsgID;
reqID++;
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
req.open("GET", url, true);
req.onreadystatechange = callback;
req.send(null);
}
function callback() {
if (req.readyState == 4) {
if (req.status == 200) {
if("" != req.responseText) {
document.getElementById("chat_output").innerHTML += req.responseText;
document.getElementById("chat_output").scrollTop = document.getElementById("chat_output").scrollHeight;
lastMsgID = parseInt(req.getResponseHeader("Chat-Message-ID"), 10);
setBullet(needBullet);
}
//check whether we should load new slides
if(req.getResponseHeader('Presentation-slides-count')) {
var count = parseInt(req.getResponseHeader('Presentation-slides-count'), 10);
if(count > slidesCount) {
var format = 'jpg';
if(req.getResponseHeader('Presentation-slides-format')) {
if((req.getResponseHeader('Presentation-slides-format') == 'png') ||
(req.getResponseHeader('Presentation-slides-format') == 'PNG')) {
format = 'png';
}
}
slideUpdate('<%= presentationURL %>slides/', format, count);
}
}
}
setTimeout('getChatMessages()', 100);
}
}
function displaySlide(n) {
document.location = document.location + "#slide" + n;
}
var doLog = 1;
function log(s) {
if(doLog == 1) {
document.getElementById('chat_output').innerHTML += s + '<br>';
}
}
function reloadImg(id) {
log('reload img: ' + id);
var im = document.getElementById(id);
var a = im.src;
im.src = '';
im.src = a;
}
// CaretPosition object
function CaretPosition() {
var start = null;
var end = null;
}
//This script does not seem to work as expected yet: Commented out
// function getCaretPosition(){
// var oField = document.getElementById('chat_msg');
//
// var oCaretPos = new CaretPosition();
//
// // IE support
// if(document.selection) {
// oField.focus();
// var oSel = document.selection.createRange();
// var selectionLength = oSel.text.length;
// oSel.moveStart ('character', -oField.value.length);
// oCaretPos.start = oSel.text.length - selectionLength;
// oCaretPos.end = oSel.text.length;
//
// } else if(oField.selectionStart == '0') { // Firefox support
// oCaretPos.start = oField.selectionStart;
// oCaretPos.end = oField.selectionEnd;
// }
//
// return (oCaretPos);
// }//getCaretPosition
//This script does not seem to work as expected yet
//Commented out. For now, use a less powerful script, but at least it works...
function setCaretPosition() {
var oField = document.getElementById('chat_msg');
//check whether textarea is visible
if(document.getElementById('chat_div').style.display == 'none') {
return;
}
//always send caret to end of textarea
oField.focus();
var a = oField.value;
oField.value = '';
oField.value = a;
// if(caretPos == null) {
// caretPos = getCaretPosition();
// }
// // IE Support
// if (document.selection) {
// oField.focus();
// var oSel = document.selection.createRange();
// oSel.moveStart ('character', -oField.value.length);
// oSel.moveEnd ('character', -oField.value.length);
// if(caretPos.end != null) {
// oSel.moveEnd ('character', caretPos.end);
// } else {
// oSel.moveEnd ('character', caretPos.start);
// }
// oSel.moveStart ('character', caretPos.start);
// } else if(oField.selectionStart == '0') { // Firefox support
// oField.selectionStart = caretPos.start;
// if(caretPos.end != null) {
// oField.selectionEnd = caretPos.end;
// } else {
// oField.selectionEnd = caretPos.start;
// }
// oField.focus();
// }
}//setCaretPostion
function slideUpdate(base, format, count) {
var div = document.getElementById('newSlides' + newSlidesDivCount);
var html = '';
for(; slidesCount < count; slidesCount++) {
html += "<div style=\"height: 3000px; width: 100%; display: none;\" id=\"slide" + (slidesCount + 1) + "_div\">" +
"\<a name=\"#slide" + (slidesCount + 1) + "\"\>\</a\>" +
"\<img onload=\"javascript:adjustImgSize(\'slide" + (slidesCount + 1) + "\'); log(\'img loaded: " + (slidesCount + 1) + "\');\" " +
"id=\"slide" + (slidesCount + 1) + "\" src=\"" + base + "slide" + (slidesCount + 1) + "." + format +
"\" onerror=\"javascript: log(\'error: " + (slidesCount + 1) + "\'); reloadImg(\'slide" + (slidesCount + 1) + "\');\"/\>" +
"</div>";
}
if(html != '') {
if(newSlidesDivCount < 20) {
newSlidesDivCount++;
}
div.innerHTML += html;
}
}//slideUpdate
<% if(uname == null) { %>
var loginSent = 0;
var chatReq;
function loginUserToChat() {
if(loginSent == 0) {
document.getElementById('username_msg').innerHTML = "";
document.getElementById('password_msg').innerHTML = "";
if(document.getElementById('username').value == "") {
document.getElementById('username_msg').innerHTML = '<p class=\"error_msg\"><%= msgs.getString("servlet.nullUsername") %></p>';
return;
}
if(document.getElementById('password').value == "") {
document.getElementById('password_msg').innerHTML = '<p class=\"error_msg\"><%= msgs.getString("servlet.nullPass") %></p>';
return;
}
var loginUrl = "<%= request.getContextPath() %>/ChatServlet?AC=53&username=" +
document.getElementById('username').value + "&password=" +
document.getElementById('password').value;
username = document.getElementById('username').value;
loginSent = 1;
if (window.XMLHttpRequest) {
chatReq = new XMLHttpRequest();
} else if (window.ActiveXObject) {
chatReq = new ActiveXObject("Microsoft.XMLHTTP");
}
chatReq.open("GET", loginUrl, true);
chatReq.onreadystatechange = chatLoginCallback;
chatReq.send(null);
}
}//loginUserToChat
function chatLoginCallback() {
if (chatReq.readyState == 4) {
if (chatReq.status == 200) {
//check whether we should load new slides
if(chatReq.getResponseHeader('Login-status')) {
var status = chatReq.getResponseHeader('Login-status');
if(status == 'ok') {
document.getElementById('chat_login').style.display = 'none';
document.getElementById('chat_input').style.display = 'block';
document.getElementById('chat_output').style.display = 'block';
getChatMessages();
return;
} else {
if(chatReq.getResponseHeader('User-messages')) {
document.getElementById('username_msg').innerHTML = '<p class=\"error_msg\">' + chatReq.getResponseHeader('User-messages') + '</p>';
}
if(chatReq.getResponseHeader('Pass-messages')) {
document.getElementById('password_msg').innerHTML = '<p class=\"error_msg\">' + chatReq.getResponseHeader('Pass-messages') + '</p>';
}
loginSent = 0;
return;
}
}
}
document.getElementById('username_msg').innerHTML = '<p class=\"error_msg\"><%= msgs.getString("error.comm") %></p>';
loginSent = 0;
}
}//chatLoginCallback
<% } %>
//-->
</script>
</head>
<body scroll="no" onunload="javascript:exitPresentation();"
onload="javascript:displaySlide(<%= PresentationManager.getLastPresentationSlide(new Long(id)) %>);"
oncontextmenu="javascript:return false;"
style="height: 100%; overflow-y: hidden; margin: 0;">
<%-- chat stuff --%>
<div id="closed_chat_div" class="closed_chat">
<span id="left_corner">
<span id="right_corner">
<a href="javascript:;" onclick="javascript:setChatVisible(1);">
<span>
<img alt="" src="../images/no_bullet.png" id="chat_title_bullet"/><%= msgs.getString("chat.title") %>
</span>
</a>
</span>
</span>
</div>
<div id="chat_div" class="chat">
<span id="left_corner">
<span id="right_corner">
<a href="javascript:;" onclick="javascript:setChatVisible(0);">
<span>
<img alt="" src="../images/no_bullet.png" id="chat_bullet"/><%= msgs.getString("chat.title") %>
</span>
</a>
</span>
</span>
<div id="chat_body">
<div id="chat_output" <%= uname == null ? "style=\"display: none;\"" : "" %> >
</div>
<div id="chat_input" <%= uname == null ? "style=\"display: none;\"" : "" %> >
<textarea id="chat_msg" rows="2" cols="60"
onblur="javascript:setCaretPosition();"
onfocus="javascript:checkUnwantedCR(this); needBullet = false; setBullet(false);"
onkeypress="javascript:processKey(self.event);"></textarea>
</div>
<% if(uname == null) { %>
<div id="chat_login" style="margin-left: 20px; margin-top: 10px;">
<p class="default_msg"><%=msgs.getString("chat.login.request")%></p>
<span id="username_msg" class="default_msg"></span>
<label for="username"><%=msgs.getString("login.username")%></label>
<input type="text" name="username" id="username" value="" maxlength="20" size="20"/>
<span id="password_msg" class="default_msg"></span>
<label for="password"><%=msgs.getString("login.password")%></label>
<input type="password" name="password" id="password" value="" size="20" maxlength="20"/>
<input type="button" value="<%=msgs.getString("login.confirm")%>" class="submit" onclick="javascript:loginUserToChat();"/>
</div>
<% } %>
</div>
</div>
<script language="javascript">
<!-- //
getChatMessages();
//-->
</script>
<%-- end chat --%>
<% for(int i = 1; i <= slidesCount; i++) { %>
<div style="height: 3000px; width: 100%; display: none;" id="slide<%= i %>_div">
<a name="#slide<%= i %>"></a>
<% if(new java.io.File(p.getPath(), "slides" + java.io.File.separator + "slide" + i + ".jpg").exists()) { %>
<img src="<%= presentationURL %>slides/slide<%= i %>.jpg" id="slide<%= i %>"
onload="javascript:adjustImgSize('slide<%= i %>'); log('img loaded: <%= i %>');"
onerror="javascript: alert('error: <%= i %>');"/>
<% } else { %>
<img src="<%= presentationURL %>slides/slide<%= i %>.png" id="slide<%= i %>"
onload="javascript:adjustImgSize('slide<%= i %>'); log('img loaded: <%= i %>');"
onerror="javascript: alert('error: <%= i %>');"/>
<% } %>
</div>
<% } %>
<div id="newSlides0"></div>
<div id="newSlides1"></div>
<div id="newSlides2"></div>
<div id="newSlides3"></div>
<div id="newSlides4"></div>
<div id="newSlides5"></div>
<div id="newSlides6"></div>
<div id="newSlides7"></div>
<div id="newSlides8"></div>
<div id="newSlides9"></div>
<div id="newSlides10"></div>
<div id="newSlides11"></div>
<div id="newSlides12"></div>
<div id="newSlides13"></div>
<div id="newSlides14"></div>
<div id="newSlides15"></div>
<div id="newSlides16"></div>
<div id="newSlides17"></div>
<div id="newSlides18"></div>
<div id="newSlides19"></div>
<div id="newSlides20"></div>
<form action="<%= request.getContextPath() %>/ChatServlet" method="POST" id="exitPresentationForm">
<input type="hidden" name="AC" value="18"/>
<input type="hidden" name="historyEntryID" value="<%= hid %>"/>
</form>
</body>
</html>