В моем текущем проекте я довольно часто обращаюсь к базе данных. Для этого я выполняю вызовы в свой Java-сервлет через вызовы jQuery Get и Post. Мне было интересно, лучше ли было бы создавать какой-либо HTML-код, используя данные, которые я собираю из базы данных в сервлете, прежде чем я отправлю его обратно в jQuery, или мне нужно сделать HTML-инъекцию только с помощью JavaScript? Например, допустим, у меня есть таблица базы данных с идентификатором пользователя и именем пользователя. Если бы я хотел создать поле выбора из этой таблицы, что было бы лучше? Или есть даже лучший способ? Не лучше ли просто отправить исходную форму данных, полученных из базы данных, из сервлета в JavaScript, что позволит ему обрабатывать все форматирование HTML?
Метод 1 (Java)
С учетом следующего HTML / JavaScript
<html>
<head>
<script type="text/javascript" src="scripts/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.get("servlet?cmd=getUsers", function(data) {
$("#select").html(data);
}, "html");
});
</script>
</head>
<body>
<div id="select"></div>
</body>
</html>
Использование следующего сервлета
PrintWriter writer = response.getWriter();
response.setContentType("text/html");
writer.println("<select id='userSelect' name='user'>");
while(resultSet.next()) {
String userId = resultSet.getString("ixUser");
String userName = resultSet.getString("sName");
writer.println("<option value='" + userId + "'>" + userName + "</option>");
}
writer.println("</select>");
Метод 2 (JavaScript)
С учетом следующего HTML / JavaScript
<html>
<head>
<script type="text/javascript" src="scripts/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.get("servlet?cmd=getUsers", function(data) {
$("#select").html("<select id='userSelect' name='user'>");
$(data).find("user").each(function() {
var id = $(this).find("id").text();
var name = $(this).find("name").text();
$("#userSelect").append("<option value='" + id + "'>" + name + "</option>");
});
$("#select").append("</select>");
}, "xml");
});
</script>
</head>
<body>
<div id="select"></div>
</body>
</html>
Использование следующего сервлета
PrintWriter writer = response.getWriter();
response.setContentType("text/xml");
writer.println("<xml>");
while(resultSet.next()) {
String userId = resultSet.getString("ixUser");
String userName = resultSet.getString("sName");
writer.println("<user>");
writer.println("<id>" + userid + "</id>");
writer.println("<name>" + userName + "</name>");
writer.println("</user>");
}
writer.println("</xml>");