J2ME Java

/*
 * @(#)HttpTest.java 1.14 00/05/24 Copyright (c) 1999,2000 Sun Microsystems,
 * Inc. All Rights Reserved.
 * 
 * This software is the confidential and proprietary information of Sun
 * Microsystems, Inc. ("Confidential Information"). You shall not disclose such
 * Confidential Information and shall use it only in accordance with the terms
 * of the license agreement you entered into with Sun.
 * 
 * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
 * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
 * NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
 * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
 * DERIVATIVES.
 */
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;
public class HttpTest extends MIDlet implements CommandListener {
  private Command exitCommand = new Command("Exit", Command.SCREEN, 2);
  private Command reloadCommand = new Command("Reload", Command.SCREEN, 1);
  private Command headCommand = new Command("Head", Command.HELP, 1);
  private String getUrl = "http://sraju1:8080/hello.txt";
  private String headUrl = "http://sraju1:8080/hello.txt?test#home";
  private Display display;
  public HttpTest() {
    display = Display.getDisplay(this);
  }
  public void startApp() {
    // Use the specified URL is overriden in the descriptor
    String u = getAppProperty("HttpTest-Url");
    if (u != null) {
      getUrl = u;
      headUrl = u + "?test#home";
    }
    readPage();
  }
  private void headPage() {
    StringBuffer b = new StringBuffer();
    try {
      HttpConnection c = null;
      c = (HttpConnection) Connector.open(headUrl);
      //      c.setRequestMethod(request);
      c.setRequestMethod(HttpConnection.HEAD);
      b.append("URL: " + c.getURL() + "\nProtocol: " + c.getProtocol()
          + "\nHost: " + c.getHost() + "\nFile: " + c.getFile()
          + "\nRef: " + c.getRef() + "\nQuery: " + c.getQuery()
          + "\nPort: " + c.getPort() + "\nMethod: "
          + c.getRequestMethod());
      InputStream is = c.openInputStream();
      // DEBUG: request System.out.println(b) ;
      b.append("\nResponseCode: " + c.getResponseCode()
          + "\nResponseMessage:" + c.getResponseMessage()
          + "\nContentLength: " + c.getLength() + "\nContentType: "
          + c.getType() + "\nContentEncoding: " + c.getEncoding()
          + "\nContentExpiration: " + c.getExpiration() + "\nDate: "
          + c.getDate() + "\nLast-Modified: " + c.getLastModified()
          + "\n\n");
      int h = 0;
      while (true) {
        try {
          String key = c.getHeaderFieldKey(h);
          if (key == null)
            break;
          String value = c.getHeaderField(h);
          b.append(key + ": " + value + "\n");
          h++;
          System.out.println(key + "(" + h + "): " + value);
        } catch (Exception e) {
          System.out.println("Exception while fetching headers");
          break;
        }
      }
      try {
        is.close();
        c.close();
      } catch (Exception ce) {
        System.out.println("Error closing connection");
      }
      TextBox t = new TextBox("Http Test", b.toString(), 1024, 0);
      System.out.println("String read from URL: " + getUrl + " - is: "
          + b.toString());
      t.addCommand(reloadCommand);
      t.addCommand(exitCommand);
      t.setCommandListener(this);
      display.setCurrent(t);
    } catch (IOException ex) {
      System.out.println("Exception reading from http:" + ex);
    }
  }
  private void readPage() {
    StringBuffer b = new StringBuffer();
    HttpConnection c = null;
    TextBox t = null;
    try {
      long len = 0;
      int ch = 0;
      System.out.println("Read Page: " + getUrl);
      c = (HttpConnection) Connector.open(getUrl);
      InputStream is = c.openInputStream();
      len = c.getLength();
      if (len != -1) {
        // Read exactly Content-Length bytes
        // DEBUG: System.out.println("Content-Length: " + len);
        for (int i = 0; i < len; i++)
          if ((ch = is.read()) != -1)
            b.append((char) ch);
      } else {
        // Read til the connection is closed.
        // (Typical HTTP/1.0 script generated output)
        while ((ch = is.read()) != -1) {
          // DEBUG: System.out.println("'" + (char)ch + "' " +
          // is.available() );
          len = is.available(); // For HTTP 1.1 servers, chunked
                      // reads.
          b.append((char) ch);
        }
      }
      try {
        is.close();
        c.close();
      } catch (Exception ce) {
        System.out.println("Error closing connection");
      }
      try {
        len = is.available();
        System.out
            .println("Inputstream failed to throw IOException after close");
      } catch (IOException io) {
        // Test to make sure available() is only valid while
        // the connection is still open.,
      }
      t = new TextBox("Http Test", b.toString(), 1024, 0);
    } catch (IOException ex) {
      System.out.println("Exception reading from http");
      if (c != null) {
        try {
          String s = c.getResponseMessage();
          System.out.println(s);
          if (s == null)
            s = "No Response message";
          t = new TextBox("Http Error", s, 1024, 0);
        } catch (IOException e) {
          ex.printStackTrace();
          String s = ex.toString();
          System.out.println(s);
          if (s == null)
            s = ex.getClass().getName();
          t = new TextBox("Http Error", s, 1024, 0);
        }
      } else {
        t = new TextBox("Http Error", "Could not open URL", 1024, 0);
      }
    }
    t.addCommand(reloadCommand);
    t.addCommand(exitCommand);
    t.addCommand(headCommand);
    t.setCommandListener(this);
    display.setCurrent(t);
  }
  /*
   * private void readPage() {
   * 
   * StringBuffer b = new StringBuffer();
   * 
   * HttpConnection c = null; TextBox t = null; try { c = ( HttpConnection
   * )Connector.open( getUrl ); InputStream is = c.openInputStream(); int ch =
   * 0; while ( (ch = is.read() ) != -1 ) { b.append( ( char )ch ); }
   * is.close(); c.close();
   * 
   * t = new TextBox( "Http Test", b.toString(), 1024, 0 );
   * System.out.println( "String read from URL: " + getUrl + " - is: " +
   * b.toString() ); } catch ( IOException ex ) { System.out.println(
   * "Exception reading from http" ); if (c != null) { try { String s =
   * c.getResponseMessage(); System.out.println( s ); if ( s == null ) s = "No
   * Response message"; t = new TextBox( "Http Error", s, 1024, 0 ); } catch (
   * IOException e ) { String s = ex.toString(); System.out.println( s ); if (
   * s == null ) s = ex.getClass().getName(); t = new TextBox( "Http Error",
   * s, 1024, 0 ); } } else { t = new TextBox( "Http Error", "Could not open
   * URL", 1024, 0 ); } } t.addCommand( reloadCommand ); t.addCommand(
   * exitCommand ); t.addCommand( headCommand ); t.setCommandListener( this );
   * display.setCurrent( t ); }
   */
  /*
   * private void headPage() {
   * 
   * StringBuffer b = new StringBuffer(); HttpConnection c = null; InputStream
   * is = null;
   * 
   * try { c = ( HttpConnection )Connector.open( headUrl );
   * System.out.println( "Going to setRequestMethod()... " );
   * c.setRequestMethod( HttpConnection.HEAD ); System.out.println( "Going to
   * get Properties " ); b.append ( "URL: " + c.getURL( ) + "\nProtocol: " +
   * c.getProtocol() + "\nHost: " + c.getHost() + "\nFile: " + c.getFile() +
   * "\nRef: " + c.getRef() + "\nQuery: " + c.getQuery() + "\nPort: " +
   * c.getPort() + "\nMethod: " + c.getRequestMethod()) ;
   * 
   * System.out.println( "Gonna openInputStream... " ); is =
   * c.openInputStream();
   * 
   * System.out.println( "Going to get Properties after OpeninputStream" );
   * b.append( "\nResponseCode: " + c.getResponseCode() + "\nResponseMessage:" +
   * c.getResponseMessage() + "\nContentLength: " + c.getLength() +
   * "\nContentType: " + c.getType() + "\nContentEncoding: " + c.getEncoding() +
   * "\nContentExpiration: " + c.getExpiration() + "\nDate: " + c.getDate() +
   * "\nLast-Modified: " + c.getLastModified() + "\n\n" );
   * 
   * System.out.println( "Done getting properties after OpenInputStream " );
   * int h = 0 ; while ( true ) { try {
   * 
   * System.out.println( "Gonna get HeaderFieldKey... " ); String key =
   * c.getHeaderFieldKey( h ); System.out.println( "Gonna get HeaderField... " );
   * System.out.println( h + ", HeaderFieldKey is: " + key ); String value =
   * c.getHeaderField( h ); System.out.println( h + ", HeaderField is: " +
   * value ); b.append ( key + ": " + value + "\n" ); h++ ; } catch (
   * Exception e ) { e.printStackTrace(); break; } }
   * 
   * TextBox t = new TextBox( "Http Test", b.toString(), 1024, 0 );
   * System.out.println ( b.toString() );
   * 
   * t.addCommand( reloadCommand ); t.addCommand( exitCommand );
   * t.setCommandListener( this ); display.setCurrent( t );
   *  } catch ( IOException ex ) { System.out.println( "Exception reading from
   * http" ); ex.printStackTrace(); } finally { try { if ( is != null ) {
   * is.close(); } if ( c != null ) { c.close(); } } catch( Exception e ) {
   * e.printStackTrace(); }
   *  } }
   */
  /**
   * Pause signals the thread to stop by clearing the thread field. If stopped
   * before done with the iterations it will be restarted from scratch later.
   */
  public void pauseApp() {
  }
  /**
   * Destroy must cleanup everything. The thread is signaled to stop and no
   * result is produced.
   */
  public void destroyApp(boolean unconditional) {
  }
  /*
   * Respond to commands, including exit
   */
  public void commandAction(Command c, Displayable s) {
    if (c == exitCommand) {
      destroyApp(false);
      notifyDestroyed();
    } else if (c == reloadCommand)
      readPage();
    else if (c == headCommand)
      headPage();
  }
}