Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码

Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码

最近做了一个Android+MyEclipse+Mysql基于SSM框架的用户登录、注册(MD5加密算法)+找回密码功能的实现。具体实现过程如下:

1.Mysql
Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码_第1张图片Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码_第2张图片
- 用户表(User表)
2.Android端
Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码_第3张图片
绿色的框可以忽略

  • CreateUserActivity(用户注册,输入手机号,点击获取验证码(模拟验证码-4位随机数),密码MD5加密存到数据库中)
  • Login ( 用户登录 )
  • RepassActivity(用户找回密码,模拟验证码,MD5密码加密)
  • MainActivity(空的界面)
  • UserInfo(UserInfo类,借助SharedPreferences实现用户记住密码、自动登录功能)
  • HttpUtilConnection(网络通讯 连接服务器端)
    3 . MyEclipse端(服务器端 SSM框架)
    Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码_第4张图片
  • CustomController.java (相当于action ,接受客户端传过来的值 --》调用service方法 --》 然后调用UserMapper.java中方法 --》UserMapper.xml操作数据库 )
  • CustomService.java ( 相当于service方法,在这个里面调用UserMapper.java接口,通过接口去UserMapper.xml中去操作数据库 )
  • UserMapper.java(接口)
  • UserMapper.xml(操作数据库,select,insert,delete,update等SQL语句)
  • LoginException.java(登录异常处理)
  • SearchException.java(搜索异常处理)
  • MD5Utils.java (MD5密码加密类)
    Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码_第5张图片
  • context.xml(连接数据库)
  • ApplicationContext.xml(配置文件)
  • web.xml (配置文件)
    下面直接上代码:
    1、Android 端
    Login
    用户输入用户名(手机号)及密码,把用户名和密码封装为Json格式发送到服务器进行判断,服务器端在返回一个结果,对返回的结果进行分开处理即可。若用户勾选记住密码(利用SharedPreferences一次存储)和自动登录,下次直接页面跳转即可。
public class Login extends AppCompatActivity {

private EditText nameEdit, passwordEdit;
private Button login;
private Button create, Repass;
private CheckBox CK_save, CK_auto;

public UserInfo userInfo;

private String username;
private String password;

private SharedPreferences sp;
private SharedPreferences.Editor editor;

private static final String USER_NAME = "user_name";
private static final String PASSWORD = "password";
private static final String ISSAVEPASS = "savePassWord";
private static final String AUTOLOGIN = "autoLogin";

private Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    context = getApplicationContext();

    sp = getSharedPreferences("userInfo", MODE_PRIVATE);
    editor = sp.edit();//获取编辑者
    nameEdit = (EditText) findViewById(R.id.nameEdit);
    passwordEdit = (EditText) findViewById(R.id.passwordEdit);
    login = (Button) findViewById(R.id.login);

    userInfo = new UserInfo(this);

    create = (Button) findViewById(R.id.createUser);
    Repass = (Button) findViewById(R.id.btnRepass);

    CK_save = (CheckBox) findViewById(R.id.savePassword);
    CK_auto = (CheckBox) findViewById(R.id.autoLogin);

    // 判断是否记住了密码的 初始默认是要记住密码的
    if (userInfo.getBooleanInfo(ISSAVEPASS)) {
        CK_save.setChecked(true);
        nameEdit.setText(userInfo.getStringInfo(USER_NAME));
        passwordEdit.setText(userInfo.getStringInfo(PASSWORD));
        // 判断是否要自动登陆
        if (userInfo.getBooleanInfo(AUTOLOGIN)) {
            // 默认是要自动登陆的
            CK_auto.setChecked(true);
            final Intent i = new Intent();
            i.setClass(Login.this, MainActivity.class);
            // startActivity(i);

            Timer timer = new Timer();
            TimerTask tast = new TimerTask() {
                @Override
                public void run() {
                    startActivity(i);
                }
            };
            timer.schedule(tast, 1500);
            this.finish();
        }
    }

    //用户注册
    create.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // 页面跳转操作
            Intent intent = new Intent(Login.this, CreateUserActivity.class);//后面改成注册acitivity
            startActivity(intent);
        }
    });

    login.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if (nameEdit.getText().toString().trim().equals("") | passwordEdit.getText().
                    toString().trim().equals("")) {
                Toast.makeText(Login.this, "请输入账号或者注册账号!", Toast.LENGTH_SHORT).show();
            } else {
                new Thread(new Runnable() {
                    @Override
                    public void run() {

                        String url = "http://10.0.2.2:8080/TOF_login/LoginUser";
                        Map params = new HashMap();
                        String name = nameEdit.getText().toString();
                        String password = passwordEdit.getText().toString();
                        params.put("U_phone", name);
                        params.put("U_pass", password);

                        String result = HttpUtilConnection.getContextByHttp(url, params);
                        Log.i("===========", result.toString());
                        Message msg = new Message();
                        msg.what = 0x12;
                        Bundle data = new Bundle();
                        data.putString("result", result);
                        Log.i("*********************", result.toString());
                        msg.setData(data);
                        hander.sendMessage(msg);

                    }

                    Handler hander = new Handler() {
                        @Override
                        public void handleMessage(Message msg) {
                            if (msg.what == 0x12) {
                                Bundle data = msg.getData();
                                String key = data.getString("result");//得到json返回的json
                                if (key != null && key.startsWith("\ufeff")) {
                                    key = key.substring(1);
                                }

                                try {
                                    JSONObject json = new JSONObject(key);
                                    String result = (String) json.get("result");
                                    if ("success".equals(result)) {

                                        //返回成功后  判断是否勾选自动登陆和记住密码 写入文件
                                        username = nameEdit.getText().toString();
                                        password = passwordEdit.getText().toString();
                                        editor.putString("ID", username);//保存用户名
                                        editor.commit();
                                        if (CK_save.isChecked()) {
                                            editor.putString("name", username);
                                            editor.putString("password", password);
                                            userInfo.setUserInfo(ISSAVEPASS, true);
                                            editor.commit();
                                        }
                                        if (CK_auto.isChecked()) {
                                            userInfo.setUserInfo(AUTOLOGIN, true);
                                        }
                                        //页面跳转
                                        Intent intent = new Intent();
                                        Bundle bundle = new Bundle();
                                        bundle.putString("U_phone", nameEdit.getText().toString());
                                        intent.putExtras(bundle);
                                        intent.setClass(context, MainActivity.class);//跳转到新闻主界面
                                        startActivity(intent);
                                        Toast.makeText(Login.this, "登录成功", Toast.LENGTH_SHORT).show();
                                    } else if ("passError".equals(result)) {
                                        Toast.makeText(Login.this, "登录失败,密码错误", Toast.LENGTH_SHORT).show();
                                        passwordEdit.setText("");
                                    }
                                    else if ("noUser".equals(result)) {
                                        Toast.makeText(Login.this, "登录失败,用户不存在,请注册", Toast.LENGTH_SHORT).show();
                                        passwordEdit.setText("");
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                    };
                }).start();
            }
        }
    });
}
    //用户忘记密码

public void Repass(View view) {
    Intent intent = new Intent(Login.this, RepassActivity.class);
    startActivity(intent);
}
}

CreateUserActivity
用户输入用户名(手机号),点击获取验证码,输入密码,点击确定。把用户名和密码封装为Json格式发送到服务器进行判断及处理,若数据库中没有该用户则在数据库中插入一条记录,反之则注册用户失败。服务器端在返回一个结果,对返回的结果进行分开处理即可。

package com.example.myapplication;

public class CreateUserActivity extends AppCompatActivity {
    private String N_name;
    private String N_pass;
    private String N_repass;
    private String yan,ma;
    private EditText edit_register, edit_setpassword, edit_resetpassword, edit_yan, edit_ma;
    private Button btn_yes, btn_cancel;
    private int userflag = 1,phoneflag = 1;

private static Context context;

public static final String PHONE = "^(((13|18)[0-9]{9})|(15[012356789][0-9]{8})|((147|170|171|173|175|176|177|178)[0-9]{8}))$";

private String result;
private String strUrl ="http://10.0.2.2:8080/TOF_login/InsertCustom";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_create_user);
    context = getApplicationContext();//获取context

    edit_ma = (EditText) findViewById(R.id.edit_ma);
    init();
    Yan();
}

private void init() {
    edit_register = (EditText) findViewById(R.id.edit_register);
    edit_setpassword = (EditText) findViewById(R.id.edit_setpassword);
    edit_resetpassword = (EditText)findViewById(R.id.edit_resetpassword);
    edit_yan = (EditText) findViewById(R.id.edit_yan);
}

/**
 * 校验手机号码
 * @param mobile
 * @return
 * @author lqyao
 */
public static final boolean isMoblie(String mobile){
    boolean flag = false;
    if (null != mobile && !mobile.trim().equals("") && mobile.trim().length() == 11) {
        Pattern pattern = Pattern.compile(PHONE);
        Matcher matcher = pattern.matcher(mobile.trim());
        flag = matcher.matches();
    }
    return flag;
}

//获取验证码
public String Yan(){
    edit_ma.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Random random = new Random();
            Set set = new HashSet<>();
            while (set.size() < 4)
            {
                int randomInt = random.nextInt(10);
                set.add(randomInt);
            }
            StringBuffer sb = new StringBuffer();
            for (Integer i : set)
            {
                sb.append("" + i);
            }
            edit_ma.setText(sb.toString());
        }
    });
    ma = edit_ma.getText().toString().trim();
    return ma;
}


/*点击按钮创建用户*/
public void Create(View view) {
    N_name = edit_register.getText().toString().trim();
    N_pass = edit_setpassword.getText().toString().trim();
    N_repass = edit_resetpassword.getText().toString().trim();
    yan = edit_yan.getText().toString().trim();
    ma = edit_ma.getText().toString().trim();
    /*判断是否输入*/
    if((N_name.isEmpty())||(N_pass.isEmpty())||(N_repass.isEmpty()) ||(yan.isEmpty())){
        userflag = 0;
        Toast.makeText(this, "不能为空,请重新输入", Toast.LENGTH_SHORT).show();
    }else{
        //判断手机号是否符合条件  11位等等
        if(N_name.length()!=11){
            userflag = 0;
            Toast.makeText(this, "手机号必须为11位,请重新输入", Toast.LENGTH_SHORT).show();
        }
        if(N_name.length()==11){
            //不符合手机号的正则表达式
                if (!isMoblie(N_name)){
                    userflag = 0;
                    Toast.makeText(this, "手机号不正确,请重新输入", Toast.LENGTH_SHORT).show();
                }
                //判断两次密码是否一致
                else if(!(N_repass.equals(N_pass))){
                    userflag=0;
                    Toast.makeText(this, "两次密码不一样,请重新输入", Toast.LENGTH_SHORT).show();
                }
                //判断验证码是否正确
                else if(!(yan.equals(ma))){
                    userflag=0;
                    Toast.makeText(this, "验证码不一样,请重新输入", Toast.LENGTH_SHORT).show();
                }
        }
    }

    /*条件满足*/
    if (userflag ==1){

        /*上传服务器存入数据库*/                    //查询一下,是否用户名重复


        final Map params = new HashMap();
        params.put("U_phone", N_name);
        params.put("U_pass", N_pass);
        Log.i("000000000000000000","-----------");

        new Thread(new Runnable() {
            @Override
            public void run() {
                //1、网络访问
                try {
                    result = HttpUtilConnection.getContextByHttp(strUrl, params);
                    Log.i("000000000000000000",result.toString().trim());

                }catch (Exception e){
                    e.printStackTrace();
                    result = "网络请求失败,请稍后再试。";
                }

                //2、UI线程显示服务器的响应结果
                Message msg = new Message();
                msg.what = 0x12;
                Bundle data = new Bundle();
                data.putString("result", result);
                msg.setData(data);
                handler.sendMessage(msg);
            }
            Handler handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    if (msg.what == 0x12) {
                        Bundle data = msg.getData();
                        String key = data.getString("result");//得到json返回的json
                        if (key.startsWith("\ufeff")) {
                            key = key.substring(1);
                        }
                        Toast.makeText(context, key, Toast.LENGTH_LONG).show();
                        try {
                            JSONObject json = new JSONObject(key);
                            String result = (String) json.get("result");
                            if ("error".equals(result)){//重名
                                Toast.makeText(CreateUserActivity.this, "该手机号已注册!请登录", Toast.LENGTH_SHORT).show();
                            }
                            else{
                                if ("success".equals(result)) {//创建成功

                                    Toast.makeText(CreateUserActivity.this, "创建用户成功!", Toast.LENGTH_SHORT).show();
                                    /*暂停1.5秒后跳转到登录界面*/
                                    final Intent localIntent = new Intent(context, Login.class);
                                    Timer timer = new Timer();
                                    TimerTask tast = new TimerTask() {
                                        @Override
                                        public void run() {
                                            startActivity(localIntent);
                                        }
                                    };
                                    timer.schedule(tast, 1500);
                                }
                                else if ("error".equals(result)){
                                    Toast.makeText(CreateUserActivity.this, "创建用户失败!", Toast.LENGTH_SHORT).show();
                                }
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            };
        }).start();
    }

}

public void btn_cancle(){

    Intent login_intent = new Intent(CreateUserActivity.this, Login.class);
    startActivity(login_intent);

}

/*onResume
从Aactivity跳到Bactivity。由于Bactivity的操作,影响了Aactivity的数据,所以再回到A的时候,需要A能够进行刷新操作。
但是默认跳回去的时候,A界面还是上次那个。*/
protected void onResume() {
    super.onResume();
}
}

RepassActivity

public class RepassActivity extends AppCompatActivity {
private String N_name;
private String N_pass;
private String N_repass;
private String yan,ma;
private EditText edit_register, edit_setpassword, edit_resetpassword, edit_yan, edit_ma;
private Button btn_yes, btn_cancel;
private int userflag = 1,phoneflag = 1;
private static Context context;
public static final String PHONE = "^(((13|18)[0-9]{9})|(15[012356789][0-9]{8})|((147|170|171|173|175|176|177|178)[0-9]{8}))$";

private String result;
private String strUrl ="http://10.0.2.2:8080/TOF_login/RepassCustom";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_repass);
    context = getApplicationContext();//获取context

    edit_ma = (EditText) findViewById(R.id.edit_ma);
    init();
    Yan();
}

private void init() {
    edit_register = (EditText) findViewById(R.id.edit_register);
    edit_setpassword = (EditText) findViewById(R.id.edit_setpassword);
    edit_resetpassword = (EditText)findViewById(R.id.edit_resetpassword);
    edit_yan = (EditText) findViewById(R.id.edit_yan);
}

/**
 * 校验手机号码
 * @param mobile
 * @return
 * @author lqyao
 */
public static final boolean isMoblie(String mobile){
    boolean flag = false;
    if (null != mobile && !mobile.trim().equals("") && mobile.trim().length() == 11) {
        Pattern pattern = Pattern.compile(PHONE);
        Matcher matcher = pattern.matcher(mobile.trim());
        flag = matcher.matches();
    }
    return flag;
}

//获取验证码
public String Yan(){
    edit_ma.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Random random = new Random();
            Set set = new HashSet<>();
            while (set.size() < 4)
            {
                int randomInt = random.nextInt(10);
                set.add(randomInt);
            }
            StringBuffer sb = new StringBuffer();
            for (Integer i : set)
            {
                sb.append("" + i);
            }
            edit_ma.setText(sb.toString());
        }
    });
    ma = edit_ma.getText().toString().trim();
    return ma;
}


/*点击按钮找回密码*/
public void Create(View view) {
    N_name = edit_register.getText().toString().trim();
    N_pass = edit_setpassword.getText().toString().trim();
    N_repass = edit_resetpassword.getText().toString().trim();
    yan = edit_yan.getText().toString().trim();
    ma = edit_ma.getText().toString().trim();
    /*判断是否输入*/
    if((N_name.isEmpty())||(N_pass.isEmpty())||(N_repass.isEmpty()) ||(yan.isEmpty())){
        userflag = 0;
        Toast.makeText(this, "不能为空,请重新输入", Toast.LENGTH_SHORT).show();
    }else{
        //判断手机号是否符合条件  11位等等
        if(N_name.length()!=11){
            userflag = 0;
            Toast.makeText(this, "手机号必须为11位,请重新输入", Toast.LENGTH_SHORT).show();
        }
        if(N_name.length()==11){
            //不符合手机号的正则表达式
            if (!isMoblie(N_name)){
                userflag = 0;
                Toast.makeText(this, "手机号不正确,请重新输入", Toast.LENGTH_SHORT).show();
            }
            //判断两次密码是否一致
            else if(!(N_repass.equals(N_pass))){
                userflag=0;
                Toast.makeText(this, "两次密码不一样,请重新输入", Toast.LENGTH_SHORT).show();
            }
            //判断验证码是否正确
            else if(!(yan.equals(ma))){
                userflag=0;
                Toast.makeText(this, "验证码不一样,请重新输入", Toast.LENGTH_SHORT).show();
            }
        }
    }

    /*条件满足*/
    if (userflag ==1){

        /*上传服务器存入数据库*/                    //查询一下,是否用户名重复


        final Map params = new HashMap();
        params.put("U_phone", N_name);
        params.put("U_pass", N_pass);
        Log.i("000000000000000000","-----------");

        new Thread(new Runnable() {
            @Override
            public void run() {
                //1、网络访问
                try {
                    result = HttpUtilConnection.getContextByHttp(strUrl, params);
                    Log.i("000000000000000000",result.toString().trim());

                }catch (Exception e){
                    e.printStackTrace();
                    result = "网络请求失败,请稍后再试。";
                }

                //2、UI线程显示服务器的响应结果
                Message msg = new Message();
                msg.what = 0x12;
                Bundle data = new Bundle();
                data.putString("result", result);
                msg.setData(data);
                handler.sendMessage(msg);
            }
            Handler handler = new Handler(){
                @Override
                public void handleMessage(Message msg) {
                    if (msg.what == 0x12) {
                        Bundle data = msg.getData();
                        String key = data.getString("result");//得到json返回的json
                        if (key.startsWith("\ufeff")) {
                            key = key.substring(1);
                        }
                        Toast.makeText(context, key, Toast.LENGTH_LONG).show();
                        try {
                            JSONObject json = new JSONObject(key);
                            String result = (String) json.get("result");
                            if ("error".equals(result)){//重名
                                Toast.makeText(RepassActivity.this, "该手机号未注册!请注册!", Toast.LENGTH_SHORT).show();
                            }
                            else{
                                if ("success".equals(result)) {//创建成功

                                    Toast.makeText(RepassActivity.this, "找回密码成功!", Toast.LENGTH_SHORT).show();
                                    /*暂停1.5秒后跳转到登录界面*/
                                    final Intent localIntent = new Intent(context, Login.class);
                                    Timer timer = new Timer();
                                    TimerTask tast = new TimerTask() {
                                        @Override
                                        public void run() {
                                            startActivity(localIntent);
                                        }
                                    };
                                    timer.schedule(tast, 1500);
                                }
                                else if ("error".equals(result)){
                                    Toast.makeText(RepassActivity.this, "找回密码失败!", Toast.LENGTH_SHORT).show();
                                }
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            };
        }).start();
    }

}

public void btn_cancle(){

    Intent login_intent = new Intent(RepassActivity.this, Login.class);
    startActivity(login_intent);

}

/*onResume
从Aactivity跳到Bactivity。由于Bactivity的操作,影响了Aactivity的数据,所以再回到A的时候,需要A能够进行刷新操作。
但是默认跳回去的时候,A界面还是上次那个。*/
protected void onResume() {
    super.onResume();
}
}

UserInfo
用于用户勾选记住密码或自动登录时临时存储用户的账号及密码的userInfo 文件。

package com.example.myapplication;

import android.content.Context;
import android.content.SharedPreferences;

public class UserInfo {

private String USER_INFO = "userInfo";

private Context context;

public UserInfo() {

}

public UserInfo(Context context) {

    this.context = context;
}
// 存放字符串型的值
public void setUserInfo(String key, String value) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.remove(key);
    editor.putString(key, value);
    editor.commit();
}

// 存放整形的值
public void setUserInfo(String key, int value) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.remove(key);
    editor.putInt(key, value);
    editor.commit();
}

// 存放长整形值
public void setUserInfo(String key, Long value) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.remove(key);
    editor.putLong(key, value);
    editor.commit();
}

// 存放布尔型值
public void setUserInfo(String key, Boolean value) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.remove(key);
    editor.putBoolean(key, value);
    editor.commit();
}

// 清空记录
public void clear() {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sp.edit();
    editor.clear();
    editor.commit();
}



// 获得用户信息中某项字符串型的值
public String getStringInfo(String key) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    return sp.getString(key, "");
}

// 获得用户息中某项整形参数的值
public int getIntInfo(String key) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    return sp.getInt(key, -1);
}

// 获得用户信息中某项长整形参数的值
public Long getLongInfo(String key) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    return sp.getLong(key, -1);
}

// 获得用户信息中某项布尔型参数的值
public boolean getBooleanInfo(String key) {
    SharedPreferences sp = context.getSharedPreferences(USER_INFO,
            Context.MODE_PRIVATE);
    return sp.getBoolean(key, false);
}
}

HttpUtilConnection

package com.example.myapplication.ustils;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;

/**
 * Created by Administrator on 2019/4/13 0013.
 */

	public class HttpUtilConnection {

    public static String BASE_URL= "http://10.0.2.2:8080/TOF_login/LoginUser";
    /*
     * urlStr:网址
     * parms:提交数据
     * return:网页源码
     * */
    public static  String getContextByHttp(String urlStr,Map parms){
        StringBuilder sb = new StringBuilder();
        try{
            URL url = new URL(urlStr);
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();
            connection.setRequestMethod("POST");
            connection.setReadTimeout(5000);
            connection.setConnectTimeout(5000);
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setInstanceFollowRedirects(true);

        OutputStream outputStream = connection.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream,"UTF-8"));
        writer.write(getStringFromOutput(parms));

        writer.flush();
        writer.close();
        outputStream.close();

        if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String temp;
            while((temp = reader.readLine()) != null){
                sb.append(temp);
            }
            reader.close();
        }else{
            return "connection error:" + connection.getResponseCode();
        }

        connection.disconnect();
    }catch (Exception e){
        return e.toString();
    }
    return sb.toString();
}

/**
 * 将map转换成key1=value1&key2=value2的形式
 * @param map
 * @return
 * @throws UnsupportedEncodingException
 */
private static String getStringFromOutput(Map map) throws UnsupportedEncodingException {
    StringBuilder sb = new StringBuilder();
    boolean isFirst = true;

    for(Map.Entry entry:map.entrySet()){
        if(isFirst)
            isFirst = false;
        else
            sb.append("&");

        sb.append(URLEncoder.encode(entry.getKey(),"utf-8"));
        sb.append("=");
        sb.append(URLEncoder.encode(entry.getValue(),"utf-8"));
    }
    return sb.toString();
}
}

activity_create_user.xml






    


    
        
        
    

    

    
        
        
        
    
    
    

        

        
    

    

    

        

        
    




    

activity_login.xml












    
    


activity_repass.xml







    


    
        
        
    

    

    
        
        
        
    
    
    

        

        
    

    

    

        

        
    




    

创建一个空的MainActivity,当用户名密码正确时跳转到空的MainActivity界面
MainActivity

package com.example.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
}

activity_main.xml






配置AndroidManifest.xml,给网络通讯的权限
AndroidManifest.xml











    
        
            

            
        
    
    
    
    


2、MySQL(基本的一些SQL 语句,建立数据库和用户表,并向用户表中插入数据)

drop database if exists tof02;//如果存在数据库tof02,则删除数据库tof02

Create  database tof02;//创建数据库tof02

use tof02;//使用tof02 数据库,之后就是对此数据库进行操作

drop table if exists User;

create table User
(
   U_id                 varchar(20) not null,
   A_id                 varchar(20),
   U_name               varchar(20),
   U_nickname           varchar(20),
   U_pass               varchar(20),
   U_sex                varchar(5),
   U_phone              char(11),
   U_status            varchar(11),
   U_balance            float,
   U_address            varchar(100),
   U_Redate             varchar(100),
   primary key (U_id)
);

-- //用户信息的插入
insert into user values('20150101000','A000','水盆','shui','123','男','13502249856','启用',100,'北京市朝阳区XXXXX','2019-06-24');
insert into user values('20150101001','A000','水桶','shuitong','123','女','15302249856','启用',10000,'北京市昌平区','2019-06-24');
insert into user values('20150101002','A000','水杯','shuibei','123','男','13502249885','禁用',100,'北京市朝阳区XXXXX','2019-06-28');
insert into user values('20150101003','A000','水手','shuishou','123','女','15302247653','禁用',10000,'北京市昌平区','2019-06-29');
select * from user;

3、Myeclipse 服务器端
代码整个太长了,完整的项目放到压缩文件中,请下载,不懂留言,看到会回复。
百度网盘
链接:https://pan.baidu.com/s/1CvqptfRpafI_8YlKpFEHqw
提取码:nrai

你可能感兴趣的:(Android+Web(SSM)实现用户登录+用户注册(MD5加密算法)+记住密码+找回密码)