Как использовать GSON и отображать информацию в файле JSP - PullRequest
3 голосов
/ 25 ноября 2011

Я занимаюсь разработкой веб-приложения на основе JSP. У меня есть класс сервлетов:

package managesystem;

import java.util.List;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

public class getUsernamesServlet extends HttpServlet{

/**
 * 
 */
private static final long serialVersionUID = 1L;

   public void doGet(HttpServletRequest req, HttpServletResponse resp){
      List<String> usernamesList = StudentManager.findAllUsernames();
      req.setAttribute("usernames", new Gson().toJson(usernamesList));

   }

}

У меня следующий вопрос: как мне проверить с помощью Ajax, доступны ли имена пользователей (если их нет в списке)? Как получить информацию JSON, которую сервлет записывает в запрос, например, в register.jsp с использованием Ajax?

С уважением,

h4

1 Ответ

5 голосов
/ 25 ноября 2011

Вам нужно записать его в тело ответа, а не устанавливать его как атрибут запроса.

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(usernamesList));

Таким образом, запрос Ajax к этому сервлету получает ответ JSON, который затем может быть пройден обычным способом с использованием JavaScript.

Тем не менее, если ваша единственная цель - проверить, доступно ли имя пользователя, то вы также можете подойти к этому немного по-другому. Вместо того, чтобы качать весь список всех имен пользователей по сети и выполнять проверку на стороне JavaScript, вы также можете просто отправить введенное имя пользователя в качестве параметра запроса сервлету и позволить БД выполнить проверить задание и вернуть только логическое значение true или false, если имя использования доступно. Например,

String username = request.getParameter("username");
boolean usernameAvailable = studentService.usernameAvailable(username);

Map<String, Object> data = new HashMap<String, Object>();
data.put("usernameAvailable", usernameAvailable);

response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(new Gson().toJson(data));

с

$.get('someservlet', { 'username': username }, function(data) {
    if (!data.usernameAvailable) {
        $('#somemessage').text('Username is not available, please choose another').show();
    }
});

Это более эффективно для полосы пропускания и менее подвержено утечке конфиденциальной информации.

Смотри также:

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