客户端:

1、登录时检查网络状态

2、登录加载进度条

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

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

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

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

服务器端:

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

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

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

下面是效果图:

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

客户端代码:

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

View Code

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;@Overridepublic 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(){@Overridepublic 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(){@Overridepublic 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() {@Overridepublic void onClick(DialogInterface dialog, int which) {// 如果没有网络连接,则进入网络设置界面startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.cancel();LoginDemoActivity.this.finish();}});builder.create();builder.show();}//HandlerHandler 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{@Overridepublic 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();  }  }

注册代码

View Code

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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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(){@Overridepublic 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(){@Overridepublic 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;}//HandlerHandler 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{@Overridepublic 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() {@Overridepublic 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();  }  }

主界面的布局:

View Code

<?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"><ImageViewandroid:id="@+id/faceImg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/login_head"/><EditTextandroid: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"/><EditTextandroid: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"/><Buttonandroid: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" /><Buttonandroid: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

View Code

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

View Code

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);}}

Android美工坊--一个QQ登录验证的小例子相关推荐

  1. android登录操作代码,Android Studio实现第三方QQ登录操作代码

    来看看效果图吧 实现QQ登录了, 新建一个项目工程 ,然后把我们刚才下载的SDK解压将jar文件夹中的jar包拷贝到我们的项目libs中 导入一个下面架包就可以 项目结构如下 打开我们的清单文件And ...

  2. Spring Security技术栈学习笔记(十四)使用Spring Social集成QQ登录验证方式

    上一篇文章<Spring Security技术栈开发企业级认证与授权(十三)Spring Social集成第三方登录验证开发流程介绍>主要是介绍了OAuth2协议的基本内容以及Spring ...

  3. Android-使用Android Studio实现第三方QQ登录

    现在的第三方登录很普遍如QQ,微博,微信,今天我们就来实现如何接入QQ登录到我们的项目中 要想使用QQ登录我们需要到腾讯开放平台注册账号获取开发者资格地址:(http://open.qq.com) 注 ...

  4. 怎么用Android做登录界面,利用Android怎么制作一个APP登录界面

    利用Android怎么制作一个APP登录界面 发布时间:2020-12-02 17:09:10 来源:亿速云 阅读:79 作者:Leah 这期内容当中小编将会给大家带来有关利用Android怎么制作一 ...

  5. android获取键盘状态,Android获取屏幕方向及键盘状态的小例子

    Android获取屏幕方向及键盘状态的小例子 复制代码 代码如下: Configuration config = getResources().getConfiguration(); if (conf ...

  6. Android开发实现简单QQ登录页面

    Android开发实现极为简单的QQ登录页面 设计一个简单QQ登录页面,无任何功能.然后打包安装到手机. 1.首先创建一个空白页面 2.打开样式设计的页面 在activity_main.xml中写入代 ...

  7. Android UI布局—— 仿QQ登录界面

    最近,有点空闲的时间就拿QQ登录界面来模仿练手,做了个简单的登录界面.界面一般般吧,不算很漂亮,现在拿出来分享,希望大家一起学习与进步.有什么不足之处,请各位大侠多多赐教,谢谢.这个界面涉及到Line ...

  8. 一个IE动画图标的小例子

    在IE6.0版本里面,打开网页的过程中,IE右上角会有一个动画图标,一个地球在转动.类似的动画还可以在MSN,QQ登陆的时候看到.这个小例子就是表现这样的实现, 下面是效果图: 它的实现原理非常简单, ...

  9. 一个整理桌面的python小例子

    不知和我一样喜欢把桌面堆满的人多不多,反正我是动不动就把桌面堆满了特别是忙得时候,windows的批处理总感觉比较乱,再加上一直希望看看脚本,在Perl,Python,Ruby的对比中选择了Pytho ...

最新文章

  1. [C]字符串排序之-冒泡法
  2. Eclipse中propedit插件安装(解决property中文问题)
  3. 小型数字系统---运动码表设计
  4. ios android 字体颜色,iOS-修改导航栏文字字体和颜色
  5. C++ Primer 第五版 第7章类 7.1——类讲解(成员函数、非成员函数、构造函数)习题答案
  6. 架设WIN32汇编程序的开发环境
  7. Java获取当前时间(二)
  8. 解决 Files 的值 HEAD无效。路径中具有非法字符...
  9. 基金公司十大非货规模逆袭(2010-2020)
  10. js锅打灰太狼(小游戏)
  11. php导出doc文件_php生成word文档并下载
  12. 针对Sql Server中进行查询操作时提示“对象名无效”
  13. 使用Hutool生成多个excel文件合并成zip压缩包下载
  14. BaaS_后端即服务 RESTful
  15. 电机专用MCU芯片LCM32F037系列内容介绍
  16. 在线JS运行 JavaScript IDE
  17. AngularJS之有序列表
  18. 20来行的Python拼写检查器
  19. JLINK和STlink使用SWD接口时连接或烧录出现故障解决问题根源解决办法
  20. 如何选择日本云服务器

热门文章

  1. 聚合登录平台网站源码
  2. VSTS 2010体验 - TFS 2010变化巨大
  3. PHP中empty,is_null,isset中的异同和功能
  4. 统计学习方法-李航(1)
  5. node.js——sequelize-auto模块生成数据库models及使用
  6. lua——alien库实现lua调用C动态链接库(dll、so)
  7. Spring boot配置项目访问路径server.context-path不起作用(改为server.servlet.context-path)
  8. Python各种推导式(列表推导式,字典推导式,集合推导式,嵌套列表推导式)
  9. 如何用Pygame写游戏(三)
  10. xshell终端中文乱码解决