Java Tutorial/J2ME/Servlet Invoke

Материал из Java эксперт
Перейти к: навигация, поиск

An example MIDlet to invoke a CGI script

   <source lang="java">

/* License

* 
* Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.
* 
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*  
*  * Redistribution of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
* 
*  * Redistribution in binary form must reproduce the above copyright notice,
*      this list of conditions and the following disclaimer in the
*      documentation and/or other materials provided with the distribution.
* 
* Neither the name of Sun Microsystems, Inc. or the names of contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*  
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*  
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility. 
*/

import java.io.IOException; import java.io.InputStream; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.TextBox; import javax.microedition.midlet.MIDlet; /**

* An example MIDlet to invoke a CGI script.
*/

public class FirstMidletServlet extends MIDlet {

 private Display display;
 String url = "http://127.0.0.1/HelloServlet";
 public FirstMidletServlet() {
   display = Display.getDisplay(this);
 }
 /**
  * Initialization. Invoked when we activate the MIDlet.
  */
 public void startApp() {
   try {
     invokeServlet(url);
   } catch (IOException e) {
     System.out.println("IOException " + e);
     e.printStackTrace();
   }
 }
 /**
  * Pause, discontinue ....
  */
 public void pauseApp() {
 }
 /**
  * Destroy must cleanup everything.
  */
 public void destroyApp(boolean unconditional) {
 }
 /**
  * Prepare connection and streams then invoke servlet.
  */
 void invokeServlet(String url) throws IOException {
   HttpConnection c = null;
   InputStream is = null;
   StringBuffer b = new StringBuffer();
   TextBox t = null;
   try {
     c = (HttpConnection) Connector.open(url);
     c.setRequestMethod(HttpConnection.GET);
     c.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");
     c.setRequestProperty("User-Agent",
         "Profile/MIDP-1.0 Configuration/CLDC-1.0");
     c.setRequestProperty("Content-Language", "en-CA");
     is = c.openDataInputStream();
     int ch;
     while ((ch = is.read()) != -1) {
       b.append((char) ch);
       // System.out.println((char)ch);
     }
     t = new TextBox("First Servlet", b.toString(), 1024, 0);
   } finally {
     if (is != null) {
       is.close();
     }
     if (c != null) {
       c.close();
     }
   }
   display.setCurrent(t);
 }

}</source>





MIDlet and Servlet

   <source lang="java">

/* License

* 
* Copyright 1994-2004 Sun Microsystems, Inc. All Rights Reserved.
* 
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*  
*  * Redistribution of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
* 
*  * Redistribution in binary form must reproduce the above copyright notice,
*      this list of conditions and the following disclaimer in the
*      documentation and/or other materials provided with the distribution.
* 
* Neither the name of Sun Microsystems, Inc. or the names of contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*  
* This software is provided "AS IS," without a warranty of any kind. ALL
* EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
* ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
* OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN")
* AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
* AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
* DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST
* REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
* INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY
* OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE,
* EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
*  
* You acknowledge that this software is not designed, licensed or intended
* for use in the design, construction, operation or maintenance of any
* nuclear facility. 
*/

import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.microedition.io.Connector; import javax.microedition.io.HttpConnection; import javax.microedition.lcdui.Choice; import javax.microedition.lcdui.rumand; import javax.microedition.lcdui.rumandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.List; import javax.microedition.lcdui.TextBox; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class SecondMidletServlet extends MIDlet implements CommandListener {

 Display display = null;
 List menu = null;
 TextBox input = null;
 String user = null;
 String url = "http://developer.java.sun.ru/servlet/RequestServlet";
 static final Command backCommand = new Command("Back", Command.BACK, 0);
 static final Command submitCommand = new Command("Submit", Command.OK, 2);
 static final Command exitCommand = new Command("Exit", Command.STOP, 3);
 String currentMenu = null;
 public SecondMidletServlet() {
 }
 public void startApp() throws MIDletStateChangeException {
   display = Display.getDisplay(this);
   menu = new List("Invoke Servlet", Choice.IMPLICIT);
   menu.append("Add a user", null);
   menu.addCommand(exitCommand);
   menu.setCommandListener(this);
   mainMenu();
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
   notifyDestroyed();
 }
 void mainMenu() {
   display.setCurrent(menu);
 }
 public void addName() {
   input = new TextBox("Enter first name:", "", 5, TextField.ANY);
   input.addCommand(submitCommand);
   input.addCommand(backCommand);
   input.setCommandListener(this);
   input.setString("");
   display.setCurrent(input);
 }
 void invokeServlet(String url) throws IOException {
   HttpConnection c = null;
   InputStream is = null;
   OutputStream os = null;
   StringBuffer b = new StringBuffer();
   TextBox t = null;
   try {
     c = (HttpConnection) Connector.open(url);
     c.setRequestMethod(HttpConnection.POST);
     c.setRequestProperty("IF-Modified-Since", "20 Jan 2001 16:19:14 GMT");
     c.setRequestProperty("User-Agent",
         "Profile/MIDP-1.0 Configuration/CLDC-1.0");
     c.setRequestProperty("Content-Language", "en-CA");
     os = c.openOutputStream();
     String str = "name=" + user;
     byte postmsg[] = str.getBytes();
     System.out.println("Length: " + str.getBytes());
     for (int i = 0; i < postmsg.length; i++) {
       os.write(postmsg[i]);
     }
     // or you can easily do:
     // os.write(("name="+user).getBytes());
     os.flush();
     is = c.openDataInputStream();
     int ch;
     while ((ch = is.read()) != -1) {
       b.append((char) ch);
       System.out.print((char) ch);
     }
     t = new TextBox("Second Servlet", b.toString(), 1024, 0);
     t.addCommand(backCommand);
     t.setCommandListener(this);
   } finally {
     if (is != null) {
       is.close();
     }
     if (os != null) {
       os.close();
     }
     if (c != null) {
       c.close();
     }
   }
   display.setCurrent(t);
 }
 public void commandAction(Command c, Displayable d) {
   String label = c.getLabel();
   if (label.equals("Exit")) {
     destroyApp(true);
   } else if (label.equals("Back")) {
     mainMenu();
   } else if (label.equals("Submit")) {
     user = input.getString();
     try {
       invokeServlet(url);
     } catch (IOException e) {
     }
   } else {
     addName();
   }
 }

}</source>