J2ME Java Tutorial

import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
public class HttpMIDlet extends MIDlet implements CommandListener, Runnable {
  private Display display;
  private Form addressForm = new Form("HTTP Client");
  private Form connectForm = new Form("Connecting");
  private Form displayForm = new Form("Server Reply");
  private TextField serverURL = new TextField("URL:", "", 256, TextField.ANY);
  private StringItem messageLabel = new StringItem(null, "Connecting...\nPlease wait.");
  private Command okCommand = new Command("OK", Command.OK, 0);
  private Command exitCommand = new Command("Exit", Command.EXIT, 0);
  private Command backCommand = new Command("Back", Command.BACK, 0);
  
  protected void startApp() throws MIDletStateChangeException {
    display = Display.getDisplay(this);
    addressForm.append(serverURL);
    addressForm.addCommand(okCommand);
    addressForm.addCommand(exitCommand);
    addressForm.setCommandListener(this);
    connectForm.append(messageLabel);
    connectForm.addCommand(backCommand);
    connectForm.setCommandListener(this);
    displayForm.append(messageLabel);
    displayForm.addCommand(backCommand);
    displayForm.setCommandListener(this);
    display.setCurrent(addressForm);
  }
  protected void pauseApp() {
  }
  protected void destroyApp(boolean unconditional)
      throws MIDletStateChangeException {
  }
  public void commandAction(Command cmd, Displayable d) {
    if (cmd == okCommand) {
      Thread t = new Thread(this);
      t.start();
      display.setCurrent(connectForm);
    } else if (cmd == backCommand) {
      display.setCurrent(addressForm);
    } else if (cmd == exitCommand) {
      try {
        destroyApp(true);
      } catch (MIDletStateChangeException ex) {
      }
      notifyDestroyed();
    }
  }
  public void run() {
    InputStream is = null;
    HttpConnection conn = null;
    try {
      String url = serverURL.getString();
      if (!url.startsWith("http://") && !url.startsWith("https://")) {
        url = "http://" + url;
      }
      conn = (HttpConnection) Connector.open(url, Connector.READ_WRITE);
      if (conn.getResponseCode() == HttpConnection.HTTP_OK) {
        is = conn.openInputStream();
        final int MAX_LENGTH = 128;
        byte[] buf = new byte[MAX_LENGTH];
        int total = 0;
        while (total < MAX_LENGTH) {
          int count = is.read(buf, total, MAX_LENGTH - total);
          if (count < 0) {
            break;
          }
          total += count;
        }
        is.close();
        String reply = new String(buf, 0, total);
        messageLabel.setText(reply);
      } else {
        messageLabel.setText("Failed: error " + conn.getResponseCode() + "\n"+ conn.getResponseMessage());
      }
      conn.close();
      display.setCurrent(displayForm);
    } catch (IOException ex) {
      System.out.println(ex);
      ex.printStackTrace();
      Alert alert = new Alert("I/O Error","An error occurred while communicating with the server.", null,AlertType.ERROR);
      alert.setTimeout(Alert.FOREVER);
      display.setCurrent(alert, addressForm);
      return;
    }
  }
}