📄 httptest.java
字号:
/* * @(#)HttpTest.java 1.2 03/01/22 * * Copyright (c) 1999-2003 Sun Microsystems, Inc. All rights reserved. * PROPRIETARY/CONFIDENTIAL * Use is subject to license terms */package example.http;import javax.microedition.midlet.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import javax.microedition.pki.*;import java.io.*;import java.util.*;/** * An example MIDlet to fetch a page using an HttpConnection. * Refer to the startApp, pauseApp, and destroyApp * methods so see how it handles each requested transition. * * Note: if you run this inside POSE using a multi-homed PC (with more * than one network connections), POSE doesn't know how to resolve * host names not connected to the first network card. To solve this, * add a line like this in your c:/WINNT/system32/drivers/etc/hosts * file: * * 204.71.202.160 www.yahoo.com */public class HttpTest extends MIDlet implements CommandListener, Runnable { /** User interface command to exit the current application. */ private Command exitCommand = new Command("Exit", Command.EXIT, 2); /** User interface command to issue an HTTP GET request. */ private Command getCommand = new Command("Get", Command.SCREEN, 1); /** User interface command to issue an HTTP POST request. */ private Command postCommand = new Command("Post", Command.SCREEN, 1); /** User interface command to issue an HTTP HEAD request. */ private Command headCommand = new Command("Head", Command.SCREEN, 1); /** User interface command to choose a test. */ private Command chooseCommand = new Command("Choose", Command.SCREEN, 2); /** User interface command to Add a new location. */ private Command addCommand = new Command("Add", Command.SCREEN, 1); /** User interface command to save a new location. */ private Command addSaveCommand = new Command("OK", Command.SCREEN, 1); /** User interface command to confirm current operation. */ private Command okCommand = new Command("OK", Command.OK, 1); /** User interface command to abort current operation. */ private Command cancelCommand = new Command("Cancel", Command.CANCEL, 1); /** The current display object. */ private Display display; /** The url to GET from the network. */ private String url; /** Array of target locations. */ private Vector urls; /** User interface list for selection. */ private List list; /** Message area for user entered URl. */ private TextBox addTextBox; /** Current command to proccess. */ private Command currentCommand; /** The current command processing thread. */ private Thread commandThread; /** Current attempt count. */ private int attempt; private TextBox t; private boolean firstTime; /** Initialize the MIDlet with a handle to the current display */ public HttpTest() { urls = new Vector(); urls.addElement("http://www.yahoo.com/"); urls.addElement("http://www.sun.com/"); urls.addElement("https://central.sun.net/"); urls.addElement("https://www.wellsfargo.com"); urls.addElement("-----------------------"); urls.addElement("http://jse.east/Telco/HttpTest.txt"); urls.addElement("http://spiro.eng/"); urls.addElement("http://spiro.eng:80/"); urls.addElement("http://localhost:8080/"); urls.addElement("-----------------------"); urls.addElement("shttp://host/notsupportedprotocol"); urls.addElement("http://:8080/missinghost"); urls.addElement("http://mal\\formed:axyt/url???"); urls.addElement("http://www.yahoo.com/no/such/page/"); urls.addElement("http://www.yahoo.com:29999/no/such/port/"); urls.addElement("http://no.such.site/"); urls.addElement("http://www.yahoo.com/bad_proxy/"); url = (String)urls.elementAt(0); display = Display.getDisplay(this); firstTime = true; } /** * Debug output routine. * @param s string to be printed. */ static final void DEBUG(String s) { if (true) { System.out.println(s); } } /** * Converts a time to a string containing the corresponding * date.<br /> * <b>NOTE:</b> This is here only because the J2ME date class does not * implement toString() in any meaningful way. * <p /> * @param time time to be converted * @return a string representation of the time in * the form "dayOfWeek, day mon year hour:min:sec GMT" */ private String time2str(long time) { Calendar c = Calendar.getInstance(TimeZone.getTimeZone("GMT")); c.setTime(new Date(time)); return c.toString(); } /** * Start creates the thread to do the timing. * It should return immediately to keep the dispatcher * from hanging. */ public void startApp() { if(firstTime) { // Use the specified URL is overriden in the descriptor String u = getAppProperty("HttpTest-Url"); if (u != null) { url = u; } mainScreen(); firstTime = false; } else { display.setCurrent(t); } } /** * Display the main screen. */ void mainScreen() { String s = "URL = " + url + ". Press Get or Post to fetch it, or Choose to " + "use another URL"; t = new TextBox("Http Test", s, s.length(), 0); setCommands(t, false); display.setCurrent(t); } /** * Pick a screen. */ void chooseScreen() { list = new List("Choose URL", Choice.EXCLUSIVE); for (int i = 0; i < urls.size(); i++) { list.append((String)urls.elementAt(i), null); } setCommands(list, true); display.setCurrent(list); } /** * Add another screen. */ void addScreen() { addTextBox = new TextBox("New URL", "http://", 200, 0); addTextBox.addCommand(addSaveCommand); addTextBox.addCommand(cancelCommand); addTextBox.setCommandListener(this); display.setCurrent(addTextBox); } /** * Read the content of the page. Don't care about the response * headers. * @param request type of HTTP request (GET or POST) */ private void readContents(String request) { StringBuffer b = new StringBuffer(); ++ attempt; b.append("attempt " + attempt + " content of " + request + " " + url + "\n"); HttpConnection c = null; OutputStream os = null; InputStream is = null; TextBox t = null; try { long len = -1; int ch = 0; long count = 0; int rc; DEBUG(request + " Page: " + url); c = (HttpConnection)Connector.open(url); DEBUG("c= " + c); c.setRequestMethod(request); c.setRequestProperty("foldedField", "first line\r\n second line\r\n third line"); if (request == HttpConnection.POST) { String m = "Test POST text."; DEBUG("Posting: " + m); os = c.openOutputStream(); os.write(m.getBytes()); os.close(); } rc = c.getResponseCode(); if (rc != HttpConnection.HTTP_OK) { b.append("Response Code: " + c.getResponseCode() + "\n"); b.append("Response Message: " + c.getResponseMessage() + "\n\n"); } is = c.openInputStream(); DEBUG("is = " + is); if (c instanceof HttpConnection) { len = ((HttpConnection)c).getLength(); } DEBUG("len = " + len); if (len != -1) { // Read exactly Content-Length bytes DEBUG("Content-Length: " + len); for (int i = 0; i < len; i++) { if ((ch = is.read()) != -1) { if (ch <= ' ') { ch = ' '; } b.append((char) ch); count ++; if (count > 200) { break; } } } } else { byte data[] = new byte[100]; int n = is.read(data, 0, data.length); for (int i = 0; i < n; i++) { ch = data[i] & 0x000000ff; b.append((char)ch); } } try { if (is != null) { is.close(); } if (c != null) { c.close(); } } catch (Exception ce) { DEBUG("Error closing connection"); } try { len = is.available(); DEBUG("Inputstream failed to throw IOException after close"); } catch (IOException io) { DEBUG("expected IOException (available())"); io.printStackTrace(); // Test to make sure available() is only valid while // the connection is still open., } t = new TextBox("Http Test", b.toString(), b.length(), 0); is = null; c = null; } catch (IOException ex) { ex.printStackTrace(); DEBUG(ex.getClass().toString()); DEBUG(ex.toString()); DEBUG("Exception reading from http"); if (c != null) { try { String s = null; if (c instanceof HttpConnection) { s = ((HttpConnection)c).getResponseMessage(); } DEBUG(s); if (s == null) s = "No Response message"; t = new TextBox("Http Error", s, s.length(), 0); } catch (IOException e) { e.printStackTrace(); String s = e.toString(); DEBUG(s); if (s == null) s = ex.getClass().getName(); t = new TextBox("Http Error", s, s.length(), 0);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -