實現功能:
用手機客戶端進行登錄服務器,然後返回消息進行交互.
服務器代碼:
LoginServlet:
package com;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/** *//*******************************************************************************
*
* @author zdw
*
*/
@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
this.doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// 得到客戶端傳入的數據(用戶名和密碼)
String username = request.getParameter("username");
String password = request.getParameter("password");
// 構建輸出流
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
// 邏輯操作(這裡寫你的邏輯判斷)
if ("zdw".equals(username) && "admin".equals(password))
{
// 響應數據
dos.writeUTF("true");
} else
{
// 響應數據
dos.writeUTF("false");
}
//
byte[] data = baos.toByteArray();
// 設置服務器響應參數
response.setStatus(HttpServletResponse.SC_OK);
response.setContentLength(data.length);
response.setContentType("application/octet-stream");
OutputStream os = response.getOutputStream();
os.write(data);
os.close();
}
}
手機客戶端代碼:
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()
{
}
}
注意此工程為MyEclipse工程,您需要安裝wtk和tomcat才能正常運行此程序.
登錄圖: