实现功能:
用手机客户端进行登录服务器,然后返回消息进行交互.
服务器代码:
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 s = 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 s = 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才能正常运行此程序.
登录图:
收敛自己的脾气,偶尔要刻意沉默,