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; }
}


CategoryJackson

JacksonSampleUsage (last edited 2009-07-22 06:38:36 by TatuSaloranta)

Copyright ©2009 FasterXML, LLC