Ссылка на список Java из сервлета в JavaScript - PullRequest
0 голосов
/ 06 июля 2019

У меня есть список, извлеченный из базы данных Postgres, и мне нужно иметь возможность ссылаться на него / манипулировать им с помощью JavaScript.

Я обновил код, как показано ниже:

Вот метод doGet сервлета:

protected void doGet(HttpServletRequest req, HttpServletResponse json) 
throws ServletException, IOException {

List<Employee> employees = uds.findAll();
req.setAttribute("employees", employees);
json.setContentType("application/json");
json.getWriter().write(String.valueOf(employees));


}

А вот что у меня сейчас есть в JavaScript:

var ajax = new XMLHttpRequest();

ajax.open("GET", "http://localhost:8080/project1attempt/servlet", true);

// send request
ajax.send();

// event to get response
ajax.onreadystatechange = function() {
    // Case state is 4 e o http.status for 200, your request is OK.
    if (ajax.readyState == 4 && ajax.status == 200) {
        var data = ajax.responseText;
        // the return
        console.log(data);
    }
}
}

Проблема, с которой я столкнулся на данный момент, заключается в том, что клиент не получает данные в формате JSON. Если я зарегистрирую данные, как показано выше, журнал выдаст что-то вроде следующего:

[Employee{, employee_id='123456', email='lt@gmail.com', firstName='Juan', 
lastName='Terri'}, Employee{, employee_id='2', email='sstark@mail.com', 
firstName='Sansa', lastName='Stark'}]

Это правильные данные, но не в полезном формате.

Однако, если я попытаюсь сделать console.log(JSON.parse(data)), тогда я получу Uncaught SyntaxError: Unexpected token E in JSON at position 1.

Я считаю, что это простая синтаксическая ошибка с моей стороны в сервлете, но я не уверен, как ее исправить.

Ответы [ 3 ]

0 голосов
/ 06 июля 2019

Попробуйте изменить свой ответ сервлета на json и получить данные с помощью Ajax. Это пример для этого!

var ajax = new XMLHttpRequest();

ajax.open("GET", "your_url_here", true);

// send request
ajax.send();

// event to get response
ajax.onreadystatechange = function() {
  // Case state is 4 e o http.status for 200, your request is OK.
    if (ajax.readyState == 4 && ajax.status == 200) {
        var data = ajax.responseText;
         // the return
        console.log(data);
    }
}
0 голосов
/ 07 июля 2019

Для других нубов, таких как я, я собрал следующее полное решение для этой проблемы:

Сервлет должен выглядеть примерно так:

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws 
ServletException, IOException {

resp.setContentType("application/json");
List<Employee> employees = uds.findAll();
String json = new ObjectMapper().writeValueAsString(employees);
resp.getWriter().write(json);

uds.findAll() - это метод, который возвращает список объектов. ObjectMapper - это утилита Джексона (я полагаю, Gson - еще один вариант). Это помещает список в формат JSON.

HTML или JSP должны выглядеть следующим образом:

var ajax = new XMLHttpRequest();

ajax.open("GET", "http://localhost:8080/project1attempt/servlet", true);

// send request
ajax.send();

// event to get response
ajax.onreadystatechange = function() {
    // Case state is 4 e o http.status for 200, your request is OK.
    if (ajax.readyState == 4 && ajax.status == 200) {
        var data = ajax.responseText;
        // the return
        console.log(JSON.parse(data));
    }
}

Это позволит получить список объектов в удобном для использования формате, который затем можно будет обрабатывать с помощью JavaScript, чтобы делать все, что вы захотите. Надеюсь, это кому-нибудь поможет!

0 голосов
/ 06 июля 2019

Вы должны использовать request.getAttribute ():

<%
  List<Employee> theEmployees = request.getAttribute("employees");
%>

Но если вы хотите эффективно использовать его в своем javascript, рекомендуется преобразовать его в json.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...