Android QQ登录验证的小例子

客户端:

1、登录时检查网络状态

2、登录加载进度条

3、登录服务器端进行验证,如果用户名和密码存在且正确,则登录,否则失败

4、注册时将用户信息保存到服务器端数据库中(MySQL)

5、记住密码功能(还不完善,只是测试)

6、对密码信息进行md5()单向加密

服务器端:

1、接收客户端发来的登录请求,如果用户名和密码存在于MySQL数据库中则返回客户端一个响应信息"success"

2、接收客户端发来的注册请求,将用户名和密码存放到MySQL数据库中

不过目前还存在很多问题,以后有时间继续更新

下面是效果图:

完整代码下载:http://115.com/file/bexv3qlf#LoginDemo.zip

备份地址:

http://download.csdn.net/detail/az44yao/4871847

客户端代码:

登录代码:这里是使用HttpClient来进行与服务器端的交互的,密码加密部分只是简单的用了下md5(),如果正式的项目中可以选用非对称加密算法会更加安全

package com.loulijun.logindemo;

import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo.State;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;

public class LoginDemoActivity extends Activity {
    /** Called when the activity is first created. */
    private Button loginBtn;
    private Button registerBtn;
    private EditText inputUsername;
    private EditText inputPassword;
    private CheckBox saveInfoItem;
    private ProgressDialog mDialog;
    private String responseMsg = "";
    private static final int REQUEST_TIMEOUT = 5*1000;//设置请求超时10秒钟
    private static final int SO_TIMEOUT = 10*1000;  //设置等待数据超时时间10秒钟
    private static final int LOGIN_OK = 1;
    private SharedPreferences sp;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        loginBtn = (Button)findViewById(R.id.login_btn_login);
        registerBtn = (Button)findViewById(R.id.login_btn_zhuce);
        inputUsername = (EditText)findViewById(R.id.login_edit_account);
        inputPassword = (EditText)findViewById(R.id.login_edit_pwd);
        saveInfoItem = (CheckBox)findViewById(R.id.login_cb_savepwd);

        sp = getSharedPreferences("userdata",0);
        //初始化数据
        LoadUserdata();

        //检查网络
        CheckNetworkState();

        //监听记住密码选项
        saveInfoItem.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener()
        {
            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                    boolean isChecked) {
                // TODO Auto-generated method stub
                //载入用户信息

                Editor editor = sp.edit();

                if(saveInfoItem.isChecked())
                {
                     //获取已经存在的用户名和密码
                    String realUsername = sp.getString("username", "");
                    String realPassword = sp.getString("password", "");
                    editor.putBoolean("checkstatus", true);
                    editor.commit();

                     if((!realUsername.equals(""))&&!(realUsername==null)||(!realPassword.equals(""))||!(realPassword==null))
                     {
                        //清空输入框
                        inputUsername.setText("");
                          inputPassword.setText("");
                          //设置已有值
                         inputUsername.setText(realUsername);
                         inputPassword.setText(realPassword);
                     }
                }else
                {
                    editor.putBoolean("checkstatus", false);
                    editor.commit();
                    //清空输入框
                    inputUsername.setText("");
                     inputPassword.setText("");
                }

            }  

        });
        //登录
        loginBtn.setOnClickListener(new Button.OnClickListener()
        {

            @Override
            public void onClick(View arg0) {
                mDialog = new ProgressDialog(LoginDemoActivity.this);
                mDialog.setTitle("登陆");
                mDialog.setMessage("正在登陆服务器,请稍后...");
                mDialog.show();
                Thread loginThread = new Thread(new LoginThread());

                loginThread.start();

            }

        });

        registerBtn.setOnClickListener(new Button.OnClickListener()
        {

            @Override
            public void onClick(View arg0) {
                Intent intent = new Intent();
                intent.setClass(LoginDemoActivity.this, RegisterActivity.class);
                startActivity(intent);
            }

        });
    }

    private boolean loginServer(String username, String password)
    {
        boolean loginValidate = false;
        //使用apache HTTP客户端实现
        String urlStr = "http://192.168.1.101:8080/LoginServlet/LoginServlet";
        HttpPost request = new HttpPost(urlStr);
        //如果传递参数多的话,可以丢传递的参数进行封装
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        //添加用户名和密码
        params.add(new BasicNameValuePair("username",username));
        params.add(new BasicNameValuePair("password",password));
        try
        {
            //设置请求参数项
            request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
            HttpClient client = getHttpClient();
            //执行请求返回相应
            HttpResponse response = client.execute(request);

            //判断是否请求成功
            if(response.getStatusLine().getStatusCode()==200)
            {
                loginValidate = true;
                //获得响应信息
                responseMsg = EntityUtils.toString(response.getEntity());
            }
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        return loginValidate;
    }

    //初始化HttpClient,并设置超时
    public HttpClient getHttpClient()
    {
        BasicHttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT);
        HttpClient client = new DefaultHttpClient(httpParams);
        return client;
    }

    //判断是否记住密码,默认记住
    private boolean isRemembered() {
        try {
            if (saveInfoItem.isChecked()) {
                return true;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }
    //初始化用户数据
    private void LoadUserdata()
    {
        boolean checkstatus = sp.getBoolean("checkstatus", false);
        if(checkstatus)
        {
            saveInfoItem.setChecked(true);
            //载入用户信息
             //获取已经存在的用户名和密码
            String realUsername = sp.getString("username", "");
            String realPassword = sp.getString("password", "");
            if((!realUsername.equals(""))&&!(realUsername==null)||(!realPassword.equals(""))||!(realPassword==null))
            {
                inputUsername.setText("");
                inputPassword.setText("");
                inputUsername.setText(realUsername);
                inputPassword.setText(realPassword);
            }
        }else
        {
            saveInfoItem.setChecked(false);
            inputUsername.setText("");
            inputPassword.setText("");
        }

    }
    //检查网络状态
    public void CheckNetworkState()
    {
        boolean flag = false;
        ConnectivityManager manager = (ConnectivityManager)getSystemService(
                Context.CONNECTIVITY_SERVICE);
        State mobile = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();
        State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
        //如果3G、wifi、2G等网络状态是连接的,则退出,否则显示提示信息进入网络设置界面
        if(mobile == State.CONNECTED||mobile==State.CONNECTING)
        return;
        if(wifi == State.CONNECTED||wifi==State.CONNECTING)
        return;
        showTips();
    }

    private void showTips()
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setIcon(android.R.drawable.ic_dialog_alert);
        builder.setTitle("没有可用网络");
        builder.setMessage("当前网络不可用,是否设置网络?");
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 如果没有网络连接,则进入网络设置界面
                startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
                LoginDemoActivity.this.finish();
            }
        });
        builder.create();
        builder.show();
    }
    //Handler
    Handler handler = new Handler()
    {
        public void handleMessage(Message msg)
        {
            switch(msg.what)
            {
            case 0:
                mDialog.cancel();

                Toast.makeText(getApplicationContext(), "登录成功!", Toast.LENGTH_SHORT).show();
                Intent intent = new Intent();
                intent.setClass(LoginDemoActivity.this, MainActivity.class);
                startActivity(intent);
                finish();
                break;
            case 1:
                mDialog.cancel();
                Toast.makeText(getApplicationContext(), "密码错误", Toast.LENGTH_SHORT).show();
                break;
            case 2:
                mDialog.cancel();
                Toast.makeText(getApplicationContext(), "URL验证失败", Toast.LENGTH_SHORT).show();
                break;

            }

        }
    };

    //LoginThread线程类
    class LoginThread implements Runnable
    {

        @Override
        public void run() {
            String username = inputUsername.getText().toString();
            String password = inputPassword.getText().toString();
            boolean checkstatus = sp.getBoolean("checkstatus", false);
            if(checkstatus)
            {
                 //获取已经存在的用户名和密码
                String realUsername = sp.getString("username", "");
                String realPassword = sp.getString("password", "");
                if((!realUsername.equals(""))&&!(realUsername==null)||(!realPassword.equals(""))||!(realPassword==null))
                {
                    if(username.equals(realUsername)&&password.equals(realPassword))
                    {
                        username = inputUsername.getText().toString();
                        password = inputPassword.getText().toString();
                    }
                }
            }else
            {
                password = md5(password);
            }
            System.out.println("username="+username+":password="+password);

            //URL合法,但是这一步并不验证密码是否正确
            boolean loginValidate = loginServer(username, password);
            System.out.println("----------------------------bool is :"+loginValidate+"----------response:"+responseMsg);
            Message msg = handler.obtainMessage();
            if(loginValidate)
            {
                if(responseMsg.equals("success"))
                {
                    msg.what = 0;
                    handler.sendMessage(msg);
                }else
                {
                    msg.what = 1;
                    handler.sendMessage(msg);
                }

            }else
            {
                msg.what = 2;
                handler.sendMessage(msg);
            }
        }

    }

    /**
     * MD5单向加密,32位,用于加密密码,因为明文密码在信道中传输不安全,明文保存在本地也不安全
     * @param str
     * @return
     */
    public static String md5(String str)
    {
        MessageDigest md5 = null;
        try
        {
            md5 = MessageDigest.getInstance("MD5");
        }catch(Exception e)
        {
            e.printStackTrace();
            return "";
        }  

        char[] charArray = str.toCharArray();
        byte[] byteArray = new byte[charArray.length];  

        for(int i = 0; i < charArray.length; i++)
        {
            byteArray[i] = (byte)charArray[i];
        }
        byte[] md5Bytes = md5.digest(byteArray);  

        StringBuffer hexValue = new StringBuffer();
        for( int i = 0; i < md5Bytes.length; i++)
        {
            int val = ((int)md5Bytes[i])&0xff;
            if(val < 16)
            {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }  

}

注册代码

package com.loulijun.logindemo;

import java.security.MessageDigest;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import com.loulijun.logindemo.LoginDemoActivity.LoginThread;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class RegisterActivity extends Activity {
    private EditText newUser,newPassword,confirmPassword;
    private Button registerBtn, clearBtn;
    private ProgressDialog mDialog;
    private String responseMsg = "";
    private static final int REQUEST_TIMEOUT = 5*1000;//设置请求超时10秒钟
    private static final int SO_TIMEOUT = 10*1000;  //设置等待数据超时时间10秒钟
    private static final int LOGIN_OK = 1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register);
        newUser = (EditText)findViewById(R.id.newUser_input);
        newPassword = (EditText)findViewById(R.id.newPassword_input);
        confirmPassword = (EditText)findViewById(R.id.Confirm_input);
        registerBtn = (Button)findViewById(R.id.registerbtn);
        clearBtn = (Button)findViewById(R.id.clearbtn);
        registerBtn.setOnClickListener(new Button.OnClickListener()
        {

            @Override
            public void onClick(View v) {
                String newusername = newUser.getText().toString();
                String newpassword = md5(newPassword.getText().toString());
                String confirmpwd = md5(confirmPassword.getText().toString());

                if(newpassword.equals(confirmpwd))
                {
                    SharedPreferences sp = getSharedPreferences("userdata",0);
                    Editor editor = sp.edit();
                    editor.putString("username", newusername);
                    editor.putString("password", newpassword);
                    editor.commit();
                    mDialog = new ProgressDialog(RegisterActivity.this);
                    mDialog.setTitle("登陆");
                    mDialog.setMessage("正在登陆服务器,请稍后...");
                    mDialog.show();
                    Thread loginThread = new Thread(new RegisterThread());
                    loginThread.start();

                }else
                {
                    Toast.makeText(getApplicationContext(), "您两次输入的密码不一致!", Toast.LENGTH_SHORT).show();
                }
            }

        });

        clearBtn.setOnClickListener(new Button.OnClickListener()
        {

            @Override
            public void onClick(View v) {
                newUser.setText("");
                newPassword.setText("");
                confirmPassword.setText("");
            }

        });
    }

    //初始化HttpClient,并设置超时
    public HttpClient getHttpClient()
    {
        BasicHttpParams httpParams = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParams, REQUEST_TIMEOUT);
        HttpConnectionParams.setSoTimeout(httpParams, SO_TIMEOUT);
        HttpClient client = new DefaultHttpClient(httpParams);
        return client;
    }

     private boolean registerServer(String username, String password)
        {
            boolean loginValidate = false;
            //使用apache HTTP客户端实现
            String urlStr = "http://192.168.1.101:8080/LoginServlet/RegisterServlet";
            HttpPost request = new HttpPost(urlStr);
            //如果传递参数多的话,可以丢传递的参数进行封装
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            //添加用户名和密码
            params.add(new BasicNameValuePair("username",username));
            params.add(new BasicNameValuePair("password",password));
            try
            {
                //设置请求参数项
                request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
                HttpClient client = getHttpClient();
                //执行请求返回相应
                HttpResponse response = client.execute(request);

                //判断是否请求成功
                if(response.getStatusLine().getStatusCode()==200)
                {
                    loginValidate = true;
                    //获得响应信息
                    responseMsg = EntityUtils.toString(response.getEntity());
                }
            }catch(Exception e)
            {
                e.printStackTrace();
            }
            return loginValidate;
        }

    //Handler
        Handler handler = new Handler()
        {
            public void handleMessage(Message msg)
            {
                switch(msg.what)
                {
                case 0:
                    mDialog.cancel();
                    showDialog("注册成功!");
                    break;
                case 1:
                    mDialog.cancel();
                    Toast.makeText(getApplicationContext(), "注册失败", Toast.LENGTH_SHORT).show();
                    break;
                case 2:
                    mDialog.cancel();
                    Toast.makeText(getApplicationContext(), "URL验证失败", Toast.LENGTH_SHORT).show();
                    break;

                }

            }
        };

        //RegisterThread线程类
        class RegisterThread implements Runnable
        {

            @Override
            public void run() {
                String username = newUser.getText().toString();
                String password = md5(newPassword.getText().toString());

                //URL合法,但是这一步并不验证密码是否正确
                boolean registerValidate = registerServer(username, password);
                //System.out.println("----------------------------bool is :"+registerValidate+"----------response:"+responseMsg);
                Message msg = handler.obtainMessage();
                if(registerValidate)
                {
                    if(responseMsg.equals("success"))
                    {
                        msg.what = 0;
                        handler.sendMessage(msg);
                    }else
                    {
                        msg.what = 1;
                        handler.sendMessage(msg);
                    }

                }else
                {
                    msg.what = 2;
                    handler.sendMessage(msg);
                }
            }

        }

    private void showDialog(String str)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("注册");
        builder.setMessage(str);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                Intent intent = new Intent();
                intent.setClass(RegisterActivity.this, LoginDemoActivity.class);
                startActivity(intent);
                finish();
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }

    /**
     * MD5单向加密,32位,用于加密密码,因为明文密码在信道中传输不安全,明文保存在本地也不安全
     * @param str
     * @return
     */
    public static String md5(String str)
    {
        MessageDigest md5 = null;
        try
        {
            md5 = MessageDigest.getInstance("MD5");
        }catch(Exception e)
        {
            e.printStackTrace();
            return "";
        }  

        char[] charArray = str.toCharArray();
        byte[] byteArray = new byte[charArray.length];  

        for(int i = 0; i < charArray.length; i++)
        {
            byteArray[i] = (byte)charArray[i];
        }
        byte[] md5Bytes = md5.digest(byteArray);  

        StringBuffer hexValue = new StringBuffer();
        for( int i = 0; i < md5Bytes.length; i++)
        {
            int val = ((int)md5Bytes[i])&0xff;
            if(val < 16)
            {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    }  

}

主界面的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/loginRoot"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/linear1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:background="@drawable/default_bg"
        android:orientation="vertical"
        >
        <RelativeLayout
            android:id="@+id/relativelayout2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="15.0px"
            android:layout_marginRight="15.0px"
            android:layout_marginTop="62.0px"
            android:background="@drawable/login_back"
            android:paddingBottom="10.0px"
            android:paddingTop="21.0px"
            >
            <ImageView
                android:id="@+id/faceImg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/login_head"
                />
            <EditText
                android:id="@+id/login_edit_account"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentTop="true"
                android:layout_marginBottom="5.0dip"
                android:layout_marginLeft="5.0dip"
                android:layout_marginTop="5.0dip"
                android:layout_marginRight="5.0dip"
                android:layout_toRightOf="@+id/faceImg"
                android:background="@drawable/edit_login"
                android:hint="@string/username_hint"
                android:singleLine="true"
                android:paddingLeft="45.0sp"
                android:saveEnabled="true"
                android:textColor="#ff3f3f3f"
                />
            <TextView
                android:id="@+id/textview01"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/login_edit_account"
                android:layout_alignLeft="@+id/login_edit_account"
                android:layout_alignTop="@+id/login_edit_account"
                android:layout_marginRight="15.0sp"
                android:gravity="center_vertical"
                android:paddingLeft="7.0sp"
                android:text="@string/username_input"
                android:textColor="#ff3f3f3f"
                android:textSize="16.0dip"
                />
            <ImageButton
                android:id="@+id/usernamespinner"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/login_edit_account"
                android:layout_alignRight="@+id/login_edit_account"
                android:layout_alignTop="@+id/login_edit_account"
                android:layout_marginRight="1.0dip"
                android:background="@drawable/more_select"
                />

            <EditText
                android:id="@+id/login_edit_pwd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/login_edit_account"
                android:layout_alignRight="@+id/login_edit_account"
                android:layout_below="@+id/login_edit_account"
                android:layout_marginRight="1.0dip"
                android:background="@drawable/edit_login"
                android:password="true"
                android:singleLine="true"
                android:paddingLeft="45.0sp"
                android:saveEnabled="true"
                android:hint="@string/password_hint"
                />
            <TextView
                android:id="@+id/textview02"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/login_edit_pwd"
                android:layout_alignRight="@+id/textview01"
                android:layout_alignTop="@+id/login_edit_pwd"
                android:gravity="center_vertical"
                android:paddingLeft="7.0sp"
                android:text="@string/password_input"
                android:textColor="#ff3f3f3f"
                android:textSize="16.0dip"
                />
            <CheckBox
                android:id="@+id/login_cb_savepwd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBaseline="@+id/login_btn_login"
                android:button="@drawable/btn_check"
                android:paddingLeft="39.0px"
                android:text="@string/opt_remember"
                android:textColor="#ff222222"
                android:textSize="16.0sp"
                />
            <Button
                android:id="@+id/login_btn_login"
                android:layout_width="90.0dp"
                android:layout_height="wrap_content"
                android:layout_below="@+id/textview02"
                android:layout_toLeftOf="@+id/login_btn_zhuce"
                android:layout_marginTop="7.0px"
                android:text="@string/login" />
            <Button
                android:id="@+id/login_btn_zhuce"
                android:layout_width="90.0dp"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_below="@+id/textview02"
                android:layout_marginTop="7.0px"
                android:text="@string/zhuce" />
        </RelativeLayout>
    </LinearLayout>

</LinearLayout>

服务器端:

服务器端采用的是Servlet,比较简单

需要创建一个表,MySQL的,这部分还没有放到代码中处理,数据库名:monitordb,表:username varchar(30),password(50)。注意配置一下MySQL的驱动

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5"> 

  <servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.loulijun.login.LoginServlet</servlet-class>
  </servlet>

  <!-- Define the Manager Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

    <servlet>
    <servlet-name>RegisterServlet</servlet-name>
    <servlet-class>com.loulijun.login.RegisterServlet</servlet-class>
  </servlet>

  <!-- Define the Manager Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>RegisterServlet</servlet-name>
    <url-pattern>/RegisterServlet</url-pattern>
  </servlet-mapping>

</web-app>

LoginServlet.java:用于登录信息的Servlet

package com.loulijun.login;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
    {

        Connection conn;
        PreparedStatement sql;
        ResultSet rs;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (Exception e)
        {
            System.out.print(e);
        }

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String msg = null;
        String uri = "jdbc:mysql://127.0.0.1/monitordb";
        String selectsql = "select username,password from user where username=? and password=?";

        try
        {
            conn = DriverManager.getConnection(uri, "root", "loulijun");
            sql = conn.prepareStatement(selectsql);

            if(username!=null&&password!=null)
            {
                sql.setString(1,username);
                sql.setString(2,password);
                rs = sql.executeQuery();
                boolean bool = rs.next();
                if(bool == true)
                {
                    msg = "success";
                }else
                {
                    msg = "failed";
                }
            }else
            {
                msg = "failed";
            }

            conn.close();
        }
        catch (SQLException e)
        {
            System.out.print(e);
        }
        out.print(msg);
        out.flush();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException
    {
        doGet(request, response);
    }

}

RegisterServlet.java:用于处理注册信息的Servlet

package com.loulijun.login;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet
{
    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
    {
        Connection conn;
        PreparedStatement sql;
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (Exception e)
        {
            System.out.print(e);
        }

        String username = request.getParameter("username");
        String password = request.getParameter("password");
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String msg = null;
        if(username!=null&&password!=null)
        {
            msg = "success";

            try
            {
                String uri = "jdbc:mysql://127.0.0.1/monitordb";
                String insertSql = "insert into user values(?,?)";
                conn = DriverManager.getConnection(uri, "root", "loulijun");
                sql = conn.prepareStatement(insertSql);
                sql.setString(1,username);
                sql.setString(2,password);
                int status = sql.executeUpdate();
                if(status!=0)
                {
                    System.out.print("添加数据成功!");
                }else
                {
                    System.out.print("添加数据失败");
                }
                conn.close();
            }
            catch (SQLException e)
            {
                System.out.print(e);
            }
        }else
        {
            msg = "failed";
        }
        out.print(msg);
        out.flush();
        out.close();
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException
    {
        doGet(request, response);
    }

}
时间: 2024-11-08 19:54:01

Android QQ登录验证的小例子的相关文章

Python 用户登录验证的小例子_python

复制代码 代码如下: #!/usr/bin/python#coding=gbk class User:    def __init__(self,username,password,age,sex):        self.username=username        self.password=password        self.age=age        self.sex=sex     def tell(self):        print 'UserContext:Nam

Android QQ登录界面绘制代码_Android

先看看效果图: 首先过程中碰到的几个问题:  1.对 EditText 进行自定义背景  2.运行时自动 EditText 自动获得焦点  3.在获得焦点时即清空 hint ,而不是输入后清空  4.清空按钮的出现时机(在得到焦点并且有输入内容时)  ---  这些问题都有一一解决 --- 以下是代码:  布局 fragment_main(问题2) <!-- android:focusable="true" android:focusableInTouchMode="t

Android屏蔽后退键的小例子

这篇文章介绍了Android屏蔽后退键的小例子,有需要的朋友可以参考一下   复制代码 代码如下: public boolean onKeyDown(int keyCode, KeyEvent event) {          if (event.getAction() == KeyEvent.ACTION_DOWN                  && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {              return

JQuery实现用户名无刷新验证的小例子_jquery

1.在静态页面里添加文本框及样式和js脚本的引用: 复制代码 代码如下: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.jb51.net/--><html xmlns="http://www.w3.org/1999/xhtml" ><head id="Head1" runat="server">    <ti

Android 读取Properties配置文件的小例子_Android

开发应用的时候会有一些有可能会变得值,例如webservice地址 应用的一些ID等等,之前一直都是直接在应用中改代码,不是忘点这忘点那,于是想到了可以用Properties配置文件,我把网址等变量配置的配置文件中,这样之后再改的话就直接改配置文件就行了,就不用改代码了下面给大家说说Properties的用法 复制代码 代码如下:  public static String getPropertiesURL(Context c, String s) {  String url = null; 

jquery插件validate验证的小例子_jquery

复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>    <title></titl

Android 读取Properties配置文件的小例子

开发应用的时候会有一些有可能会变得值,例如webservice地址 应用的一些ID等等,之前一直都是直接在应用中改代码,不是忘点这忘点那,于是想到了可以用Properties配置文件,我把网址等变量配置的配置文件中,这样之后再改的话就直接改配置文件就行了,就不用改代码了 下面给大家说说Properties的用法 复制代码 代码如下:  public static String getPropertiesURL(Context c, String s) {   String url = null;

Android实现QQ登录界面遇到问题及解决方法_Android

先给大家炫下效果图: 首先过程中碰到的几个问题: 1.对 EditText 进行自定义背景 2.运行时自动 EditText 自动获得焦点 3.在获得焦点时即清空 hint ,而不是输入后清空 4.清空按钮的出现时机(在得到焦点并且有输入内容时) ......... --- 这些问题都有一一解决 --- 以下是代码: 布局 fragment_main(问题2) <!-- android:focusable="true" android:focusableInTouchMode=&

Android开发之登录验证实例教程_Android

本文所述实例源自一个项目开发中的登录验证功能,具体的要求就是,在Android端输入用户名和密码,在服务器端验证MySQL数据库中是否有此用户,实现之前当然首要的是,如何使Android端的数据发送到服务器端,具体的实现方法如下: 服务器端:ManageServlet.java代码如下: public class ManageServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServle