原创:
http://blog.csdn.net/iwanghang
原创: http://blog.csdn.net/iwanghang
1.先来个Androiod端口的GIF效果图
App图标大家可能没看清,这个是AndroidStudio3.0最新的默认App图标哦~~
2.不要忘记把MySQL的jar导进来
如果忘了jar怎么下载,请看这里:http://blog.csdn.net/iwanghang/article/details/78489898
jar包放入的位置在这里:D:\eclipse-workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\servletDemo\WEB-INF\lib
3.Server端代码
package com.iwanghang.servletDemo;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Test01 implements Servlet{
private String username; // 请求参数中的username
private String password; // 请求参数中的password
private String passwordSql; // 数据库中的password
private String islogin; //返回参数是否登录成功
public Test01() {
System.out.println("HelloServlet...");
}
@Override
public void destroy() {
System.out.println("destroy...");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig...");
return null;
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo...");
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init...");
}
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
System.out.println("service...");
// 获取请求参数
username = request.getParameter("username");
password = request.getParameter("password");
System.out.println("获取请求参数 username = " + username);
System.out.println("获取请求参数 password = " + password);
// 在MySQL中,用username查找对应的password
try {
Class.forName("com.mysql.jdbc.Driver");//创建驱动器
// 写法1. 这样写会有警告,但是不影响使用
// Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","123456");//这是数据库的路径,并且还有输入账号(一般默认是root),密码之前创建用户时的那个
// 写法2. 看起来比较复杂,但是没有警告
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo1113?useUnicode=true&characterEncoding=utf-8&useSSL=false","root", "123456");
PreparedStatement pst=con.prepareCall("select * from aaa_user where username = '" + username + "'");//输入的是要在MySQL中执行的代码
ResultSet rs=pst.executeQuery();//获得执行上面代码后的结果集
while(rs.next()){
passwordSql = rs.getString("password");
} // 最后还有关闭连接
}
catch (ClassNotFoundException ex) {
Logger.getLogger(Test01.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(Test01.class.getName()).log(Level.SEVERE, null, ex);
}
// 对比数据库中的password,与请求参数中的password,是否一致
if (passwordSql.equals(password)){ // 如果相同
islogin = "yes";
}else{ // 如果不同
islogin = "no";
};
System.out.println("islogin = " + islogin);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
// String jsonStr = "{\"username\":\"王航\""
// + ",\"password\":\"987654\""
// + ",\"status\":\"1\"}";
String jsonStr = "{\"islogin\":\""+islogin+"\"}";
PrintWriter out = null;
try {
out = response.getWriter();
out.write(jsonStr);
} catch (IOException e) {
e.printStackTrace();
} finally {
if (out != null) {
out.close();
}
}
}
}
4.Server端控制台调试信息
5.Android端代码
package com.iwanghang.demo1113;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import static com.iwanghang.demo1113.Constant.LOGINCHECK;
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity";
// 创建请求队列
RequestQueue requestQueue = null;
private EditText et_username;
private EditText et_password;
private Button bt_login;
private String username;
private String password;
private String status;
private String islogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestQueue = Volley.newRequestQueue(this);
et_username = findViewById(R.id.et_username);
et_password = findViewById(R.id.et_password);
bt_login = findViewById(R.id.bt_login);
initLogin(); // 登录 按钮点击事件监听
}
/**
* 登录 按钮点击事件监听
*/
private void initLogin() {
bt_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 获取输入账号密码
username = et_username.getText().toString();
password = et_password.getText().toString();
Log.v(TAG, " username = " + username);
netLogin(); // 发送网络请求
}
});
}
/**
* 发送网络请求 尝试登陆
*/
private void netLogin() {
// 请求地址
//String url = "hhttp://192.168.1.129:8080/servletDemo/test01";
StringRequest request = new StringRequest(Request.Method.POST, LOGINCHECK, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.v(TAG,"response = " + response);// 返回结果
try {
if (response.equals("no")){
Toast.makeText(MainActivity.this, "登录失败,请检查ID是否正确", Toast.LENGTH_SHORT).show();
}else {
JSONObject object1 = new JSONObject(response);
islogin = object1.getString("islogin"); // islogin
Log.e("TAG", "islogin = " + islogin);
Toast.makeText(MainActivity.this, "islogin = " + islogin, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.v(TAG,"error = " + error); // 错误结果
Toast.makeText(getApplication(),"网络出问题",Toast.LENGTH_SHORT).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
// 请求的内容
Map<String,String> params = new HashMap<>();
params.put("username",username);
params.put("password",password);
return params;
}
};
// 添加到请求队列
requestQueue.add(request);
}
}
6.Android端就不贴控制台调试信息了,小伙伴们不要忘了Volley的jar包
如果忘了,看看这里也可以:http://blog.csdn.net/column/details/12824.html
原创: http://blog.csdn.net/iwanghang