📄 httpview.java
字号:
/* * @(#)HttpView.java 1.6 01/01/08 * Copyright (c) 1999-2001 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. */package example.http;import javax.microedition.midlet.*;import javax.microedition.io.*;import javax.microedition.lcdui.*;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.util.Vector;import java.lang.String;import example.About;/** * 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. */public class HttpView extends MIDlet implements CommandListener, Runnable { /** user interface command for indicating Exit request. */ Command exitCommand = new Command("Exit", Command.EXIT, 2); /** user interface comand for indicating a page reload request. */ Command reloadCommand = new Command("Reload", Command.SCREEN, 1); /** user interface command to request an HTTP HEAD transaction. */ Command headCommand = new Command("Head", Command.SCREEN, 1); /** user interface command to request an HTTP POST transaction. */ Command postCommand = new Command("Post", Command.SCREEN, 1); /** user interfrace command to request an HTTP GET transaction. */ Command getCommand = new Command("Get", Command.SCREEN, 1); /** user interface command to request copyright information. */ Command aboutCommand = new Command("About", Command.HELP, 1); /** user interface command to cancel the current screen. */ Command cancelCommand = new Command("Cancel", Command.SCREEN, 1); /** user interface command to return back to previous screen. */ Command backCommand = new Command("Back", Command.BACK, 1); /** user interface command to request current HTTP headers. */ Command headersCommand = new Command("Headers", Command.SCREEN, 1); /** user interface command to display current HTTP request headers. */ Command requestsCommand = new Command("Requests", Command.SCREEN, 1); /** user interface command to display errors from current request. */ Command errorsCommand = new Command("Errors", Command.SCREEN, 1); /** user interface command to enter a new URL */ Command newURLCommand = new Command("New URL", Command.SCREEN, 10); /** user inetrface command to remove the current URL */ Command removeURLCommand = new Command("Remove", Command.SCREEN, 11); /** user interface command to confirm current screen. */ Command okCommand = new Command("Ok", Command.SCREEN, 1); /** user interface command to display help message. */ Command helpCommand = new Command("Help", Command.HELP, 1); /** user interface component containing a list of URLs */ List urlList; /** array of current URLs */ Vector urls; /** user interface alert component. */ Alert alert; /** user interface text box for the contents of the fetched URL. */ TextBox content; /** current display. */ Display display; /** instance of a thread for asynchronous networking and user interface. */ Thread thread; /** current requested url. */ String url; /** current HTTP request type - GET, HEAD, or POST */ Command requestCommand; /** user interface form to hold progress results. */ Form progressForm; /** user interface progress indicator. */ Gauge progressGauge; /** user interface screen for HTTP headers */ Form headerForm; /** form to display request including parsing */ Form requestForm; /** form to display exceptions */ Form errorsForm; /** data entry text box for inputting URLs */ TextBox urlbox; /** initialize the MIDlet with the current display object. */ public HttpView() { display = Display.getDisplay(this); setupList(); alert = new Alert("Warning"); alert.setTimeout(2000); headerForm = new Form("Headers"); headerForm.addCommand(backCommand); headerForm.addCommand(requestsCommand); headerForm.setCommandListener(this); requestForm = new Form("Request headers"); requestForm.addCommand(backCommand); requestForm.addCommand(errorsCommand); requestForm.setCommandListener(this); progressForm = new Form("Progress"); progressForm.addCommand(cancelCommand); progressForm.setCommandListener(this); progressGauge = new javax.microedition.lcdui.Gauge(url, false, 9, 0); progressForm.append(progressGauge); errorsForm = new Form("Errors"); errorsForm.addCommand(backCommand); errorsForm.addCommand(headersCommand); errorsForm.setCommandListener(this); urlbox = new TextBox("Enter Url", "http://", 400, TextField.URL); urlbox.addCommand(okCommand); urlbox.setCommandListener(this); } /** * Start creates the thread to do the timing. * It should return immediately to keep the dispatcher * from hanging. */ public void startApp() { if (urlList.size() > 0) { display.setCurrent(urlList); } else { alert.setString("No url's configured."); display.setCurrent(alert, urlList); } } /** * 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. * @param unconditional true if a forced shutdown was requested */ public void destroyApp(boolean unconditional) { thread = null; } /** * Check the attributes in the descriptor that identify * url's and titles and initialize the lists of urls * and urlList. * <P> * The attributes are named "ViewTitle-n" and "ViewURL-n". * The value "n" must start at "1" and increment by 1. */ void setupList() { urls = new Vector(); urlList = new List("URLs", List.IMPLICIT); urlList.addCommand(headCommand); urlList.addCommand(getCommand); urlList.addCommand(postCommand); urlList.addCommand(exitCommand); urlList.addCommand(newURLCommand); urlList.addCommand(removeURLCommand); urlList.addCommand(helpCommand); urlList.setCommandListener(this); for (int n = 1; n < 100; n++) { String nthURL = "ViewURL-"+ n; String url = getAppProperty(nthURL); if (url == null || url.length() == 0) { break; } String nthTitle = "ViewTitle-" + n; String title = getAppProperty(nthTitle); if (title == null || title.length() == 0) { title = url; } urls.addElement(url); urlList.append(title, null); } urls.addElement("http://jse.east/Telco/HttpTest.txt"); // urls.addElement( // "http://dhcp-70-219:8080/examples/servlet/httpdbexport"); // urls.addElement( // "http://jse.east.sun.com/~kfinn/proxy.jar"); // urls.addElement( // "http://dhcp-70-219:8080/examples/servlet/HelloWorldKerry"); urlList.append("Test URL", null); } /** * Respond to commands, including exit * @param c user interface command requested * @param s screen object initiating the request */ public void commandAction(Command c, Displayable s) { try { if (c == exitCommand) { destroyApp(false); notifyDestroyed(); } else if (c == headCommand || c == getCommand || c == postCommand || c == List.SELECT_COMMAND) { if (c == List.SELECT_COMMAND) c = getCommand; requestCommand = c; // Display the progress screen and // start the thread to read the url int i = urlList.getSelectedIndex(); url = (String)urls.elementAt(i); genProgressForm("Progress", url); display.setCurrent(progressForm); thread = new Thread(this); thread.start(); } else if (c == headersCommand) { display.setCurrent(headerForm); } else if (c == requestsCommand) { display.setCurrent(requestForm); } else if (c == errorsCommand) { display.setCurrent(errorsForm); } else if (c == backCommand) { if (s == headerForm || s == requestForm || s == errorsForm) { display.setCurrent(content); } else { // Display the list of urls. display.setCurrent(urlList); } } else if (c == cancelCommand) { // Signal thread to stop and put an alert. thread = null; alert.setString("Loading cancelled."); display.setCurrent(alert, urlList); } else if (c == aboutCommand) { About.showAbout(display); } else if (c == newURLCommand) { display.setCurrent(urlbox); } else if (c == removeURLCommand) { int i = urlList.getSelectedIndex(); urlList.delete(i); urls.removeElementAt(i); } else if (c == okCommand && s == urlbox) { String newurl = urlbox.getString(); System.out.println("Adding url: " + newurl); urlList.append(newurl, null); urls.addElement(newurl); display.setCurrent(urlList); } else if (c == helpCommand) { String helpString = "Use Head, Get or Post to download a URL.\n\n" + "Use 'New URL' to enter a new URL."; Alert alert = new Alert(null, helpString, null, null); alert.setTimeout(Alert.FOREVER); display.setCurrent(alert); } } catch (Exception ex) { System.out.println(ex); ex.printStackTrace(); } } /** * Fetch the specified url in a separate thread and update the * progress bar as it goes. * If the user cancels the fetch, the thread be changed from this thread. * If this happens no further updates should be made to the * displayable forms. Those shared objects may be re-used * by the next fetch. */ public void run() { long start = 0, end = 0; int bytecode_count_start = 0, bytecode_count_end = 0; Thread mythread = Thread.currentThread(); String method = HttpConnection.GET; if (requestCommand == headCommand) { method = HttpConnection.HEAD; } else if (requestCommand == postCommand) { method = HttpConnection.POST; } if (content == null) { content = new TextBox("Content", "", 4096, 0); content.addCommand(backCommand); content.addCommand(headersCommand); content.setCommandListener(this); } // Clear the buffers and forms so then can be displayed // even if an exception terminates reading early. content.setTitle("Body len = 0"); content.setString(""); genErrorsForm("Errors", null); clearForm(requestForm); clearForm(headerForm); progressGauge.setValue(1); HttpConnection conn = null; InputStream input = null; OutputStream output = null; StringBuffer b; String string = null; try { long len = 0; conn = (HttpConnection)Connector.open(url); conn.setRequestMethod(method); setConfig(conn); if (mythread != thread) { return; } progressGauge.setValue(2); for (int hops=0; hops<2; hops++) { // Send data to the server (if necessary). Then, see if // we're redirected. If so, hop to the new URL // specified by the server. // // You can choose how many hops to make by changing the
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -