J2ME/J2EE实现用户登录交互   -- 未审核
编辑文档
实现功能:
用手机客户端进行登录服务器,然后返回消息进行交互.
服务器代码:
LoginServlet:
复制到剪贴板  Java代码
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:
复制到剪贴板  Java代码
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()   
    {   
   
    }   
   
}