вызов сервлета Java из JavaScript

Я пытаюсь создать веб-приложение с помощью шаблона разработки MVC. Для GUI первая часть хотела бы использовать JavaScript. И для Сервлетов Java контроллера.

Теперь я действительно никогда не работал с JavaScript, таким образом, мне нелегко выяснять, как назвать Сервлет Java от JavaScript и как получить ответ от Сервлета.

Кто-либо может выручить меня?

34
задан BalusC 30 October 2012 в 13:54
поделиться

3 ответа

Итак, вы хотите запускать вызовы 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 $. 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);
    });
});

См. Также :

67
ответ дан 27 November 2019 в 16:33
поделиться

Извините, я читаю jsp, а не javascript.Вам нужно сделать что-то вроде (обратите внимание, что это относительный URL-адрес и может отличаться в зависимости от URL-адреса документа, в котором находится этот javascript):

document.location = 'path/to/servlet';

Где ваше отображение сервлета в web.xml выглядит примерно так:

<servlet-mapping>
    <servlet-name>someServlet</servlet-name>
    <url-pattern>/path/to/servlet*</url-pattern>
</servlet-mapping>
0
ответ дан 27 November 2019 в 16:33
поделиться

Я действительно рекомендую вам использовать jquery для вызовов javascript и некоторую реализацию JSR311, например jersey для уровня обслуживания, который будет делегировать вашим контроллерам .

Это поможет вам со всей базовой логикой обработки HTTP-вызовов и сериализации данных, что очень помогает.

1
ответ дан 27 November 2019 в 16:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: