Android+Servle+mysql实现的后台登录注册功能

时间:2021-12-31 13:09:53

相信学习Android开发的各位一定会遇到写后台登录注册的功能,今天我就在这里分享一下自己写的后台Servlet+Android如何实现这一功能。如有不足之处,欢迎提出意见

首先整理一下整个程序的逻辑:

登录功能:在用户输入用户名密码后,点击“登录”,android客户端获取EditText中的内容,通过网络发送post请求到自己写的服务器上(我使用的服务器是tomcat,IDE是MyEclipse),服务器端接收获取到的数据,利用JDBC连接mysql数据库(这里需要先下载好JDBC的驱动,自己上网找就好了)查询数据库中是否存在该用户名和密码,如果存在,返回“success”,否则服务器返回失败,android客户端再根据返回的信息判断是否登录成功。

注册功能:基本逻辑和登录功能差不多,无非这个是传递数据后是服务器往数据库中添加新的用户名和密码。

值得一提的是,在写后台功能之前自己先在mysql中创建数据库,用于保存注册的用户名和密码信息

sql语句也分享一下吧:

create table user(id int primary key auto_increment,

                          username varchar(20),

                          password varchar(20));

接下来是我自己写的源码:

登录功能的LoginServlet:

public class LoginServlet extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException {
	    PrintWriter out = response.getWriter();  
            request.setCharacterEncoding("utf-8");  
            String name = request.getParameter("username");   
            String pass = request.getParameter("password");  
        try{
            Class.forName("com.mysql.jdbc.Driver");
          //下面的括号中数据是mysql数据库的用户名和密码,安装数据库的时候自己设置的
            Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
            String sql="select * from user where username='"+name+"'and password='"+pass+"'";
            Statement st=con.createStatement();
            ResultSet rs=st.executeQuery(sql);
            if(rs.next())
            {
            	 out.write("success");  
                 System.out.print("成功");
            }
            else   
            {  
                out.write("failed"); 
                System.out.print("失败");
            }  
             rs.close();
             st.close();
             con.close();
           }catch (Exception e)
           {	         
           e.printStackTrace();
           } 
        System.out.print(name+pass);
    }  
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

注册功能的RegisterServlet(其实代码差不多,无非是传入的sql语句不同):

public class RegisterServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	    PrintWriter out = response.getWriter();  
            request.setCharacterEncoding("utf-8");  
            String name = request.getParameter("username");  
            String pass = request.getParameter("password"); 
            if(name!=null&&pass!=null)
        {
        try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","root");
            String sql="insert into user(username,password)values(?,?)";
            PreparedStatement ps=con.prepareStatement(sql);  
            ps.setString(1,name);
            ps.setString(2,pass);
            int row=ps.executeUpdate();
            if(row>0)
            {
            	 out.write("success");  
                 System.out.print("成功");
            }
            else   
            {  
                out.write("failed"); 
                System.out.print("失败");
            }  
             ps.close();
             con.close();
           }catch (Exception e)
           {	         
           e.printStackTrace();
           } 
    }  
        else{
        	 out.write("failed"); 
        }
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

Android端代码:

布局文件就不分享了,每个人可以根据自己的喜好设计,总的来说只要包含“登录”和“注册”的Button,用户名和密码的EditText就行了,客户端中我就把登录注册的功能写上了,也不加其他额外的功能比如说判断是否有网络之类的,切入主题,简单明了,代码过多反而画蛇添足了。

几个需要注意的点:

1.由于需要网络,必须在AndroidManifest清单文件中添加网络权限

<uses-permission android:name="android.permission.INTERNET" />

2.其中的IP是自己发布的后台的地址,当然,如果是有云服务器或者是互联网上存在的地址那就更好了,直接就有IP地址了。

没有的话,可以参照我的方法:手机连上笔记本电脑或者是路由器的wifi,使自己的手机和电脑保持在同一网络,然后查询自己电脑的Ipv4地址,再加上自己的Servlet后缀名,就得到后台IP。

3.我这里使用了当前流行的Android网络框架okHttp,需要在build.gradle中添加依赖:

compile 'com.squareup.okhttp3:okhttp:3.4.1'

首先是登录功能:

public class MainActivity extends AppCompatActivity {
    private EditText username, password;
    private Button loginButton,registerButton;
    private  String responseData,name,pass;
    private final String IP="http://192.168.1.4:8080/serve/login";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        loginButton = (Button) findViewById(R.id.loginButton);
        registerButton = (Button) findViewById(R.id.registerButton);
        username = (EditText) findViewById(R.id.usernames);
        password = (EditText) findViewById(R.id.passwords);

        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, RegActivity.class);
                startActivity(intent);
            }
        });
        
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pass = password.getText().toString();
                name = username.getText().toString();
                if (name.length()<1||pass.length()<1) {
                    Toast.makeText(MainActivity.this, "用户名或密码不能为空", Toast.LENGTH_SHORT).show();}
                else{
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        try {
                            OkHttpClient client=new OkHttpClient();
                            RequestBody requestBody=new FormBody.Builder().add("username",name).add("password",pass).build();
                            Request request=new Request.Builder().url(IP).post(requestBody).build();
                            Response response=client.newCall(request).execute();
                            responseData=response.body().string();
                            if(responseData.equals("success"))
                            {
                                Intent intent = new Intent(MainActivity.this, ExtraActivity.class);
                                startActivity(intent);}
                        }catch (Exception e){
                            e.printStackTrace();}
                    }
                }).start();}
            }
        });
    }
}
由于逻辑处理功能在在后台就完成了,因此注册功能和登录功能的代码几乎完全相同,利用网络框架okHttp发送post请求到服务器端,根据返回值写对应的客户端逻辑。怎么样,看到这里,是不是感觉非常简单呢?自己赶快动手实验一下吧!