系统登录/注册模块(Android app)的开发

系统登录/注册模块(Android app)的开发

后台开发关键代码

private static final long serialVersionUID = 1L;
    
	static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
	static final String DB_URL = "jdbc:mysql://localhost:3306/app?useUnicode"  //地址
            + "=true&characterEncoding=utf-8&useSSL=false";  
	static final String USER_NAME = "root";
	static final String PASSWORD = "123456";
	
	private Connection conn;
	private Statement stmt;
	
    /**
     * @throws SQLException 
     * @throws ClassNotFoundException 
     * @see HttpServlet#HttpServlet()
     */
    public ResignerServlet() throws SQLException, ClassNotFoundException {
    	
    	 super();
    	Class.forName(JDBC_DRIVER);
    	
       
        // TODO Auto-generated constructor stub
    }
@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		// TODO Auto-generated method stub
		//System.out.println("===========");
		//String name = req.getParameter("name");
		
		//System.out.println("name : " + name);
		
		//PrintWriter out = resp.getWriter();
        //String sendString;
        //sendString="asdcfe";                  //此服务器要返回的数据
        //out.write(sendString);
        //out.close();
		
		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

我们创建这个类需要这样进行继承->extends HttpServlet

MD5加密

md5加密是不可逆的,我们在输入密码登录的时候,只需要再加密一次,进行比较即可

String src = password;
			    					        try {
			    					            // 加密对象,指定加密方式
			    					            MessageDigest md5 = MessageDigest.getInstance("md5");
			    					            // 准备要加密的数据
			    					            byte[] b = src.getBytes();
			    					            // 加密
			    					            byte[] digest = md5.digest(b);
			    					            // 十六进制的字符
			    					            char[] chars = new char[] { '0', '1', '2', '3', '4', '5',
			    					                 '6', '7' , '8', '9', 'A', 'B', 'C', 'D', 'E','F' };
			    					            StringBuffer sb = new StringBuffer();
			    					            // 处理成十六进制的字符串(通常)
			    					            for (byte bb : digest) {
			    					                sb.append(chars[(bb >> 4) & 15]);
			    					                sb.append(chars[bb & 15]);
			    					            }
			    					            // 打印加密后的字符串
			    					            System.out.println(sb);
			    					            String tmp="insert into users(username,password) values('"+username+"','"+sb.toString()+"')";
						    		               stmt.executeUpdate(tmp);
						    		               System.out.println("用户名:"+username+"注册成功");
						    		               response.getWriter().print("ok");
			    					        } catch (NoSuchAlgorithmException e) {
			    					            e.printStackTrace();
			    					        }

注意在进行比较的时候,需要转成字符出,我们在这里面变成了StringBuffer,所以我们采用一下方式转换位字符串。

sb.toString()

web.xml

<servlet-mapping>
  	<servlet-name>loginSer</servlet-name>
  	<url-pattern>/login</url-pattern>
  </servlet-mapping>
  <servlet>
  <servlet-name>ResignerSer</servlet-name>
  <servlet-class>action.ResignerServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>ResignerSer</servlet-name>
  	<url-pattern>/Resigner</url-pattern>
  </servlet-mapping>

在这个里面进行注册

app连接后台代码

public void reg() {
        String username  = u1.getText().toString();
        String password  = p1.getText().toString();
        // TODO Auto-generated method stub
        String uriAPI = "http://192.168.43.139:8080/Back2/login?username="+username+"&password="+password;
        //String uriAPI = getString(R.string.server);

        // 将属性文件流装载到Properties对象中
        System.out.println("url : " + uriAPI);
        System.out.println("连接获取数据...");
        /* 建立HTTP Get联机 */
        HttpGet httpRequest = new HttpGet(uriAPI);
        try {

            /* 发到HTTP request */
            HttpResponse httpResponse = new DefaultHttpClient().execute(httpRequest);
            //System.out.println(httpResponse.getStatusLine().getStatusCode());
            /* 若状态码为200 ok */
            if (httpResponse.getStatusLine().getStatusCode() == 200) {
                /* 取响应字符串 */
                final String strResult = EntityUtils.toString(httpResponse
                        .getEntity());
                //System.out.println(strResult);
				/*try {
					SAXParserFactory factory = SAXParserFactory.newInstance();
					XMLReader reader = factory.newSAXParser().getXMLReader();
					reader.setContentHandler(new ContentHandler());
					reader.parse(new InputSource(new StringReader(strResult)));
				}
				catch (Exception e) {
					e.printStackTrace();
				}*/
                System.out.println("成功获得数据 : " + strResult);

                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if("ok".equals(strResult)){
                            Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                            //finish();
                            Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
                            String username = u1.getText().toString();
                            intent.putExtra("username", username);
                            startActivity(intent);
                        } else {
                            Toast.makeText(MainActivity.this,strResult,Toast.LENGTH_SHORT).show();
                        }
                    }
                });

            } else {
                System.out.println("Error Response: "
                        + httpResponse.getStatusLine().toString());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

由于这些包以及过时了,所以我们需要在build.gradle里面添加一行代码

compileSdkVersion 29
    buildToolsVersion "29.0.2"
    useLibrary 'org.apache.http.legacy'

接收后台传过来的数据

Handler handler = new Handler();
 handler.post(new Runnable() {
                    @Override
                    public void run() {
                        if("ok".equals(strResult)){
                            Toast.makeText(MainActivity.this,"登录成功",Toast.LENGTH_SHORT).show();
                            //finish();
                            Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
                            String username = u1.getText().toString();
                            intent.putExtra("username", username);
                            startActivity(intent);
                        } else {
                            Toast.makeText(MainActivity.this,strResult,Toast.LENGTH_SHORT).show();
                        }
                    }
                });

在注册成功后跳转到登录界面可以使用finish(),这相当于关闭了当前界面

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

        u1  = (EditText)findViewById(R.id.username);
        p1  = (EditText)findViewById(R.id.password);
        Button button1 =(Button) findViewById(R.id.reg);
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Toast.makeText(MainActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();

                Intent intent = new Intent(MainActivity.this,ResignActivity.class);
                startActivity(intent);
            }
        });
        Button button2 =(Button) findViewById(R.id.login);
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Toast.makeText(MainActivity.this,"You clicked Button 1",Toast.LENGTH_SHORT).show();

                new Thread(){
                    public void run(){
                        reg();
                    }
                }.start();
                //Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
                //startActivity(intent);
            }
        });



    }

在上面这段代码里面我们额外需要注意线程代码的使用

登录成功如何显示用户名

首先看登录界面的代码

Intent intent = new Intent(MainActivity.this,WelcomeActivity.class);
                            String username = u1.getText().toString();
                            intent.putExtra("username", username);
                            startActivity(intent);

接下来看欢迎界面的代码

Intent intent = getIntent();

        String username = intent.getStringExtra("username");

        Toast.makeText(WelcomeActivity.this,"欢迎:"+username+"登录",Toast.LENGTH_SHORT).show();

此时就可以实现我们需要的效果了

效果图

在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 8837722 查看本文章

注意事项

我们在开发app的时候,我们需要在自己的手机里面打开开发者模式

发布了32 篇原创文章 · 获赞 25 · 访问量 4104

猜你喜欢

转载自blog.csdn.net/weixin_44143695/article/details/103539737