J2ME/J2EE實現使用者登入互動

來源:互聯網
上載者:User

實現功能:
用手機用戶端進行登入伺服器,然後返回訊息進行互動.

伺服器代碼:
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才能正常運行此程式.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.