J2ME/J2EE实现用户登录交互

实现功能:
用手机客户端进行登录服务器,然后返回消息进行交互.

服务器代码:
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才能正常运行此程序.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

上善若水_厚德载物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值