Вы делаете это немного сложным путем . Конечно, есть более простой способ сделать это. Просто отправьте как обычные параметры запроса, а не как JSON. Вы можете использовать jQuery.serialize()
, чтобы собрать все поля формы в качестве параметров. Вот пример того, как должна выглядеть JSP:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
$('#form').submit(function() {
$form = $(this);
$.post($form.attr('action'), $form.serialize(), function(response) {
alert(response); // "OK"
});
return false;
});
});
</script>
</head>
<body>
<form id="form" action="register" method="post">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit">
</form>
</body>
</html>
А вот как может выглядеть сервлет, который прослушивает url-pattern
из /register/*
:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println(username + "," + password);
response.getWriter().write("OK"); // You can write JSON string here.
}
С помощью плагина jQuery form он станет более прозрачным.
$(document).ready(function() {
$('#form').ajaxForm(function(response) {
alert(response); // "OK"
});
});
Чтобы ответить от сервлета на jQuery, проще, если вы возвращаете реальные данные JSON. Например:
Map<String, Object> data = new HashMap<String, Object>();
if (userDAO.exist(username)) {
data.put("success", false);
data.put("message", "Username in use, please choose another");
} else {
userDAO.create(username, password);
data.put("success", true);
data.put("message", "User successfully registered");
}
response.setContentType("application/json");
response.getWriter().write(new Gson().toJson(data)); // Gson = Google Gson.
и затем в jQuery:
$(document).ready(function() {
$('#form').ajaxForm(function(data) {
$('#message').addClass(data.success ? 'success' : 'error').text(data.message).show();
});
});