手机客户端代码:
LoginForm:
package com;
import java.io.DataInputStream;
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.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
/**
* 用Http方式与服务器交互
*
* @author zdw
*
*/
public class LoginForm extends MIDlet implements CommandListener
{
????private Form form = null;
????private Display display = Display.getDisplay(this);;
????private Command login = null;
????private Command exit = null;
????private TextField username = null;
????private TextField password = null;
????private Alert alert = null;
????private Alert error = null;
????public LoginForm()
????{
???????? form = new Form("用户登录");
???????? display.setCurrent(form);
???????? login = new Command("登录", Command.SCREEN, 1);
???????? exit = new Command("退出", Command.EXIT, 1);
???????? form.addCommand(login);
???????? form.addCommand(exit);
???????? username = new TextField("用户名", "", 20, TextField.ANY);
???????? password = new TextField("密码", "", 20, TextField.PASSWORD);
???????? form.append(username);
???????? form.append(password);
???????? form.setCommandListener(this);
???? }
????public void initAlertOK()
????{
???????? alert = new Alert("提示", "登录成功!!\r\n您的用户名为:" + username.getString()
????????????????+ "\r\n密码为:" + password.getString(), null, AlertType.INFO);
???????? alert.setTimeout(Alert.FOREVER);
???????? display.setCurrent(alert);
???? }
????public void initAlertError()
????{
???????? error = new Alert("提示", "登录失败,用户名或密码错误", null, AlertType.ERROR);
???????? display.setCurrent(error);
???? }
????protected void startApp() throws MIDletStateChangeException
????{
???? }
????/**
????? * 事件处理
?????*/
????public void commandAction(Command cmd, Displayable dis)
????{
????????// 点击退出按钮事件
????????if (cmd.getCommandType() == Command.EXIT)
????????{
???????????? System.out.println("exit");
????????????this.notifyDestroyed();
???????? }
????????if (cmd == login)
????????{
????????????// 必须开启独立线程来处理Http请求,否则会造成死锁
????????????new Thread(new Runnable()
????????????{
????????????????public void run()
????????????????{
????????????????????try
????????????????????{
???????????????????????? inTurnServer();
???????????????????? } catch (Exception e)
????????????????????{
???????????????????????? e.printStackTrace();
???????????????????? }
???????????????? }
???????????? }).start();
???????? }
???? }
????/***************************************************************************
????? * 与服务器交互相关代码
?????*/
????public void inTurnServer()
????{
????????try
????????{
????????????// 服务器请求地址
???????????? String url = "http://localhost:8888/LoginWeb/LoginServlet";
????????????// 用户输入的用户名
???????????? String username = this.username.getString();
????????????// 用户输入的密码
???????????? String password = this.password.getString();
????????????// 用url建立一个Http连接(安全的)
???????????? HttpConnection conn = (HttpConnection) Connector.open(url);
????????????// 设置请求类型为POST
???????????? conn.setRequestMethod(HttpConnection.POST);
????????????// 设置一般的请求属性
???????????? conn.setRequestProperty("Content-Type",
????????????????????"application/x-www-form-urlencoded");
???????????? conn.setRequestProperty("User-Agent",
????????????????????"Profile/MIDP-1.0 Configuration/CLDC-1.0");
???????????? conn.setRequestProperty("Content-Language", "en-US");
???????????? conn.setRequestProperty("Accept", "application/octet-stream");
???????????? conn.setRequestProperty("Connection", "close");
????????????// 要发送的数据
???????????? String formData = "username=" + username + "&password=" + password;
????????????// 转换显字节流
????????????byte[] data = formData.getBytes();
????????????// 设置写入流的长度
???????????? conn.setRequestProperty("Content-Length", Integer
???????????????????? .toString(data.length));
???????????? OutputStream os = conn.openOutputStream();
???????????? os.write(data);
???????????? os.close();
????????????// 得到Http响应代码
????????????int rc = conn.getResponseCode();
????????????// 正常响应
????????????if (rc == HttpConnection.HTTP_OK)
????????????{
????????????????// 构建输入流
???????????????? DataInputStream dism = new DataInputStream(conn
???????????????????????? .openInputStream());
????????????????// 读取服务器返回的字节流
???????????????? String result = dism.readUTF();
???????????????? dism.close();
????????????????// 判断
????????????????if (result.equals("true"))
????????????????{
????????????????????// 显示登录成功
????????????????????this.initAlertOK();
???????????????? }
????????????????if (result.equals("false"))
????????????????{
????????????????????// 显示登录失败
????????????????????this.initAlertError();
????????????????????// 将输入框置空
????????????????????this.username.delete(0, this.username.getString().length());
????????????????????this.password.delete(0, this.password.getString().length());
??????????????? }
???????????? }
???????? } catch (IOException e)
????????{
???????????? e.printStackTrace();
???????? }
???? }
????protected void destroyApp(boolean arg0) throws MIDletStateChangeException
????{
???? }
????protected void pauseApp()
????{
???? }
}
?