Передача данных из сервлета в код javascript в приложении Ajax?

У меня есть простое приложение jsp/servlet, и я хочу добавить функцию AJAX в это приложение. Я использую JQuery, но неважно, какую инфраструктуру javascript я использую. Это мой код:

<script type="text/javascript">

        function callbackFunction(data){
            $('#content').html(data);
        }
        $('document').ready(function(){

            $('#x').click(function() {
              $.post('/ajax_2/servlet',callbackFunction)

            });
        });
    </script>
    <body>
        <a href="#" id="x">Increase it</a>
        <div id="content"></div>

    </body>
</html>

сервлетов

    HttpSession session = request.getSession();
    Integer myInteger = (Integer)session.getAttribute("myInteger");
    if(myInteger == null)
        myInteger = new Integer(0);
    else
        myInteger = new Integer(myInteger+1);
    session.setAttribute("myInteger", myInteger);
    response.getWriter().println(myInteger);

Вопрос:

Я использую out.print для передачи данных из сервлета в код javascript (ajax-код), но если у меня есть сложная структура, такая как Вектор объектов или что-то вроде этого, что является лучшим способом передачи данных? как насчет файла XML, JSON? Есть ли специальная библиотека jsp/servlets для передачи данных из сервлета в приложение ajax? Как я могу проанализировать эти данные в callbackFunction?

Ответ 1

Лучший способ - использовать JSON. Существует несколько библиотек Java, которые могут преобразовывать полноценные объекты Java в строку JSON и наоборот. Дальнейший доступ JSON можно получить в Javascript совершенно естественным образом без преобразования/массирования данных вперед и назад в другом формате.

Что касается части сервера, я настоятельно рекомендую выбрать Google Gson как сериализатор JSON. Gson является предпочтительным выбором, поскольку он поддерживает преобразование сложных Javabeans и массивов, коллекций и карт их в JSON и наоборот без проблем в одной строке кода. Он даже поддерживает дженерики. В основном все, что вам нужно сделать, это следующее:

String json = new Gson().toJson(object);

Ознакомьтесь с руководством пользователя чтобы узнать больше о возможностях Gson.

Все со всеми, на стороне сервера достаточно:

public static void writeJson(HttpServletResponse response, Object object) throws IOException {
    response.setContentType("application/json");
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(new Gson().toJson(object));
}