Я пытаюсь создать веб-приложение с помощью шаблона разработки MVC. Для GUI первая часть хотела бы использовать JavaScript. И для Сервлетов Java контроллера.
Теперь я действительно никогда не работал с JavaScript, таким образом, мне нелегко выяснять, как назвать Сервлет Java от JavaScript и как получить ответ от Сервлета.
Кто-либо может выручить меня?
Итак, вы хотите запускать вызовы Ajax сервлета? Для этого вам понадобится объект XMLHttpRequest
в JavaScript. Вот пример, совместимый с Firefox:
<script>
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
var data = xhr.responseText;
alert(data);
}
}
xhr.open('GET', 'myservlet', true);
xhr.send(null);
</script>
Однако он очень подробный и не совсем совместим с кроссбраузерными приложениями. Для лучшего кроссбраузерного способа запуска ajaxical запросов и обхода дерева HTML DOM я рекомендую взять jQuery . Вот перезапись вышеуказанного в jQuery:
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$.get('myservlet', function(data) {
alert(data);
});
</script>
В любом случае сервлет на сервере должен быть отображен на url-шаблоне
из / myservlet
(вы можете изменить это на свой вкус) и иметь хотя бы doGet ()
и записать данные в ответ следующим образом:
String data = "Hello World!";
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(data);
Это должно показать Hello World!
в предупреждении JavaScript.
Конечно, вы также можете использовать doPost ()
, но тогда вы должны использовать 'POST'
в xhr.open ()
или использовать $ .post ()
вместо $. get ()
в jQuery.
Затем, чтобы отобразить данные на странице HTML, вам нужно манипулировать HTML DOM . Например, у вас есть
<div id="data"></div>
в HTML, где вы хотите отобразить данные ответа, тогда вы можете сделать это вместо alert (data)
в первом примере:
document.getElementById("data").firstChild.nodeValue = data;
В Пример jQuery, вы могли бы сделать это более кратким и приятным способом:
$('#data').text(data);
Чтобы продвинуться дальше, вы хотели бы иметь легкий доступный формат данных для передачи более сложных данных. Распространенными форматами являются XML и JSON.Последний вариант наиболее предпочтителен, поскольку он более краток и может очень легко использоваться как в Java, так и в JavaScript. В Java можно использовать Google Gson для преобразования полнофункциональных объектов Java в JSON и наоборот.
List<Product> products = productDAO.list(); // Product is just a Javabean with properties `id`, `name` and `description`.
String json = new Gson().toJson(products);
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(json);
В JavaScript вы можете использовать jQuery См. Также : Извините, я читаю jsp, а не javascript.Вам нужно сделать что-то вроде (обратите внимание, что это относительный URL-адрес и может отличаться в зависимости от URL-адреса документа, в котором находится этот javascript): Где ваше отображение сервлета в web.xml выглядит примерно так: Я действительно рекомендую вам использовать jquery для вызовов javascript и некоторую реализацию JSR311, например jersey для уровня обслуживания, который будет делегировать вашим контроллерам . Это поможет вам со всей базовой логикой обработки HTTP-вызовов и сериализации данных, что очень помогает. $. GetJSON ()
, чтобы получить его «мгновенно». Давайте отобразим его в
.
$.getJSON('myservlet', function(data) {
var table = $('<table>').appendTo($('#data'));
$.each(data, function(i, product) {
var row = $('<tr>').appendTo(table);
$('<td>').text(product.id).appendTo(row);
$('<td>').text(product.name).appendTo(row);
$('<td>').text(product.description).appendTo(row);
});
});
document.location = 'path/to/servlet';
<servlet-mapping>
<servlet-name>someServlet</servlet-name>
<url-pattern>/path/to/servlet*</url-pattern>
</servlet-mapping>
Похожие вопросы: