Javascript client / Servlet service example
(contributed by Matt Mendez)
// CLIENT SIDE: In javascript file(s)
// Part 1
// To use YUI connection manager and json libs:
<!-- Combo-handled YUI JS files: -->
</script>// Part 2
// This is the call to the servlet, put this in the event handler for initiating action
sUrl = "servlet/#YOURPACKAGE#.JsonHandler";
var request = YAHOO.util.Connect.asyncRequest('POST', sUrl, callback, postData);// Part 3
// This can be anywhere else...
var handleSuccess = function(o){
if(o.responseText !== undefined){
t = "Transaction id: " + o.tId;
t += "HTTP status: " + o.status;
t += "Status code message: " + o.statusText;
t += "<li>HTTP headers: <ul>" + o.getAllResponseHeaders + "</ul></li>";
t += "Servlet response: " + o.responseText;
t += "Argument object: " + o.argument;
//alert(t);
var retUser;
try {
retUser = YAHOO.lang.JSON.parse(o.responseText);
} catch (e) {
alert("Invalid response data");
}
alert("New First Name = " + retUser.name.first);
alert("New Last Name = " + retUser.name.last);
}
}
var handleFailure = function(o){
if(o.responseText !== undefined){
t = div.innerHTML = "<li>Transaction id: " + o.tId + "</li>";
t += "<li>HTTP status: " + o.status + "</li>";
t += "<li>Status code message: " + o.statusText + "</li>";
}
}
var callback =
{
success:handleSuccess,
failure: handleFailure,
argument: ['foo','bar']
};
var myUserTest = {
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" : "MALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
};
var postData = YAHOO.lang.JSON.stringify(myUserTest);// SERVER SIDE: In jar files
// JsonHandler.java
import javax.servlet.http.*;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import java.io.*;
import org.codehaus.jackson.map.ObjectMapper;
public class JsonHandler extends HttpServlet
{
final ObjectMapper mapper = new ObjectMapper(); // can reuse, share globally
// Handles the HTTP <code>GET</code> method.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processRequest(request, response);
}
// Handles the HTTP <code>POST</code> method.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
// Read incoming stream
UserTest user = null;
try {
user = mapper.readValue(request.getInputStream(), UserTest.class);
user.getName().setFirst("Andrew");
user.getName().setLast("JacksonJson");
// logger.log("Incoming First Name = " + user.getName().getFirst()+", last = "+user.getName().getLast()));
} catch (Exception e) { // handle problem, log or such
e.printStackTrace();
}
try { // Send back to client
OutputStream out = response.getOutputStream();
mapper.writeValue(out, user);
} catch (IOException e) {
e.printStackTrace();
}
}
}// UserTest.java
// Put this is a different java file (because it's public)
public class UserTest {
// enum is new keyword, must compile for 1.5 or above
public enum Gender { MALE, FEMALE };
public static class Name {
private String _first, _last;
public String getFirst() { return _first; }
public String getLast() { return _last; }
public void setFirst(String s) { _first = s; }
public void setLast(String s) { _last = s; }
}
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;
public Name getName() { return _name; }
public boolean isVerified() { return _isVerified; }
public Gender getGender() { return _gender; }
public byte[] getUserImage() { return _userImage; }
public void setName(Name n) { _name = n; }
public void setVerified(boolean b) { _isVerified = b; }
public void setGender(Gender g) { _gender = g; }
public void setUserImage(byte[] b) { _userImage = b; }
}