Android客户端+mysql+springmvc服务器端实现登陆的小案例
首先是客户端
通过输入用户名+密码实现登录
点击登录后向服务器发送http请求 服务器收到请求后验证用户名密码是否与mysql数据库上的相应字段是否一致
然后返回json数据 客户端获取响应的结果 然后提醒是否登录成功
MainActivity代码:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
//服务器应该为本地ip
private static String url="http://172.20.210.68:8080/CheLianWangServer/login.action?";
private final String url_constant="http://172.20.210.68:8080/CheLianWangServer/login.action?";
private EditText txUserName;
private EditText txPassword;
private Button btnLogin;
@Override
public void onCreate(Bundle savedInstanceState) {
///在Android2.2以后必须添加以下代码
//本应用采用的Android4.0
//设置线程的策略
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
//设置虚拟机的策略
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
//.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());
super.onCreate(savedInstanceState);
//设置页面布局
setContentView(R.layout.main);
//设置初始化视图
initView();
//设置事件监听器方法
setListener();
}
/**
* 创建初始化视图的方法
*/
private void initView() {
btnLogin=(Button)findViewById(R.id.btnLogin);
txUserName=(EditText)findViewById(R.id.UserName);
txPassword=(EditText)findViewById(R.id.textPasswd);
}
/**
* 设置事件的监听器的方法
*/
private void setListener() {
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String userName=txUserName.getText().toString();
Log.v("userName = ", userName);
String password=txPassword.getText().toString();
Log.v("passwd = ",password);
loginRemoteService(userName,password);
}
});
}
/**
* 获取Struts2 Http 登录的请求信息
* @param userName
* @param password
*/
public void loginRemoteService(String userName,String password){
String result=null;
try {
//创建一个HttpClient对象
HttpClient httpclient = new DefaultHttpClient();
//远程登录URL
//下面这句是原有的
//processURL=processURL+"userName="+userName+"&password="+password;
url= url_constant+"username="+userName+"&password="+password;
Log.d("远程URL", url);
//创建HttpGet对象
HttpGet request=new HttpGet(url);
//请求信息类型MIME每种响应类型的输出(普通文本、html 和 XML,json)。允许的响应类型应当匹配资源类中生成的 MIME 类型
//资源类生成的 MIME 类型应当匹配一种可接受的 MIME 类型。如果生成的 MIME 类型和可接受的 MIME 类型不 匹配,那么将
//生成 com.sun.jersey.api.client.UniformInterfaceException。例如,将可接受的 MIME 类型设置为 text/xml,而将
//生成的 MIME 类型设置为 application/xml。将生成 UniformInterfaceException。
request.addHeader("Accept","text/json");
//获取响应的结果
HttpResponse response =httpclient.execute(request);
//获取HttpEntity
HttpEntity entity=response.getEntity();
//获取响应的结果信息
String json =EntityUtils.toString(entity,"UTF-8");
//JSON的解析过程
if(json!=null){
JSONObject jsonObject=new JSONObject(json);
result=jsonObject.get("login").toString();
}
if(result==null){
json="登录失败请重新登录";
}
//创建提示框提醒是否登录成功
AlertDialog.Builder builder=new Builder(MainActivity.this);
builder.setTitle("提示")
.setMessage(result)
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).create().show();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
AndroidManifest.xml中要配置android.permission.INTERNET权限
服务器端
使用springmvc的注解方式解析客户端传来的URL 拿到用户名和密码
如果用户名和密码与mysql数据库上的相应字段一致 则返回json数据给客户端提醒登陆成功
模型层:
private String username;
private String password;
public User(String username, String password) {
super();
this.username = username;
this.password = password;
//this.sex = sex;
//this.age = age;
//this.photo = photo;
}
public User() {
super();
// TODO Auto-generated constructor stub
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
db层:
public class GetConn {
public Connection getConnection(){
Connection connection = null;
try {
Class.forName("com.mysql.jdbc.Driver");
connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/usermsg","root",null);
} catch (Exception e) {
// TODO: handle exception
}
return connection;
}
public void closeConn(Connection connection){
try {
connection.close();
} catch (Exception e) {
// TODO: handle exception
}
}
dbimp:
public boolean Login(String username,String password){
boolean b = false;
GetConn getConn = new GetConn();
ResultSet rs = null;
Connection conn = getConn.getConnection();
try {
PreparedStatement ps = conn.prepareStatement("select * from usermsg where username=? and password=?");
ps.setString(1, username);
ps.setString(2, password);
rs = ps.executeQuery();
if(rs.next()){
b = true;
}else{
b = false;
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return b;
}
Controller:
@Controller
public class UserController {
Map
byte[] jsonBytes;
@RequestMapping("/login.action") // 请求url地址映射,类似Struts的action-mapping
public Object Login(HttpServletRequest request, HttpServletResponse response,ModelMap model){
try {
String username = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("<<<<<<<<<<
System.out.println("username = "+username+" password = "+password);
json = new HashMap
UserDaoImp userDaoImp = new UserDaoImp();
boolean b = userDaoImp.Login(username, password);
if(b){
json.put("login", "登陆成功,欢迎光临!"+"尊敬的"+username+"阁下!");
}else{
json.put("login", "用户名或密码错误!");
}
jsonBytes = json.toString().getBytes("utf-8");
response.setContentLength(jsonBytes.length);
response.getOutputStream().write(jsonBytes);
response.getOutputStream().flush();
response.getOutputStream().close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
更多相关文章
- 解决“密钥库文件不存在: debug.keystore”
- android dalvik vm oo
- Android使用模板生成Word文档并查看
- Android(安卓)中对 aar 文件的使用攻略
- 【转】java 总结:泛型
- Android(安卓)Studio配置javah自动生成头文件
- Android(安卓)Studio 打包生成正式apk(XXX-release.apk)的两种方式
- Android(安卓)Davlik heap profiling
- Android(安卓)O Treble框架