Если вы хотите делать что-то на стороне сервера во время загрузки страницы, вам не обязательно нужен JS / Ajax для этого.Вы можете просто позволить JSP сделать работу.Это экономит стоимость еще одного HTTP-запроса.
Пусть метод сервлета doGet()
сохранит его в области запроса и перенаправит в JSP.
Roster roster = connection.getRoster();
request.setAttribute("rosterEntries", roster.getEntries());
request.getRequestDispatcher("/WEB-INF/page.jsp").forward(request, response);
Пусть JSP использует JSTL <c:forEach>
перебрать его и напечатать элементы <option>
.
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
...
<select multiple>
<c:forEach items="${rosterEntries}" var="rosterEntry">
<option>${fn:escapeXml(rosterEntry.user)}</option>
</c:forEach>
</select>
(fn:escapeXml()
не является обязательным, но он просто предотвращает потенциальные дыры в атаке XSS)
Теперь вызовите URL сервлета вместо JSP.JSP заполняет его «при загрузке страницы».
Не имеет отношения к конкретной проблеме . Если вы используете jQuery, то вам не следует создавать XMLHttpRequest
объекты самостоятельно.Это не имеет никакого смысла.Просто используйте функции $.ajax()
, $.get()
и т. Д.Например, проверьте этот вопрос .
Если вы действительно хотите решить эту проблему с помощью jQuery, тогда лучше всего позволить сервлету возвращать данные в виде JSON и использовать $.getJSON()
чтобы получить его.Вместо этого сделайте следующее в методе doGet()
:
Roster roster = connection.getRoster();
String rosterEntriesJson = new Gson().toJson(roster.getEntries());
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(rosterEntriesJson);
(Gson здесь Google GSON , просто скачайте JAR в /WEB-INF/lib
)
Сопоставьте этот сервлет с /buddies
и выполните следующие действия в JSP / jQuery:
<script>
$(document).ready(function() {
$.getJSON('buddies', function(rosterEntriesJson) {
var $buddies = $('#buddies');
$.each(rosterEntriesJson, function(index, rosterEntry) {
$('<option>').text(rosterEntry.user).appendTo($buddies);
});
});
});
</script>
...
<select id="buddies" multiple></select>