android客户端向服务器端验证登陆方法的实现1
遇到的问题:一个条件查询与多个条件查询,所用到的方式不一样
参考文档: http://www.oschina.net/question/1160609_133366 mybatis多条件查询的一个错误
解决方案如下:
利用序列号的方式解决多个参数的查询问题。对象与数据库关系的映射层。我们也可以用hashmap实现。
层次结构如下:

首先定义model层里面的Userlist类,这是和我们后台mysql里面的表是一一对应的,然后定义UserlistMapper类,这个类主要是用来封装一些个方法,比如说增删改查等。其实现通过UserlistMapper.xml来实现,这个里面主要涉及一些sql语句。
做完上面这些以后,我们就需要和客户端交互,所以定义SrvUserlist类,主要与客户端进行交互。里面有dopost与doget等方法。当然先是响应service()的方法,然后根据客户端的请求,选择不同的方法进行响应。比如说,客户端请求的是post方法,那么服务器端就需要执行dopost方法与之对应。
dao层代码:(Data access object)包含的数据的所有操作。数据访问层:
package zhuxuekui.data;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import zhuxuekui.model.Userlist;
public interface UserlistMapper {
Userlist selectUserlist(@Param("username")String username,@Param("passward")String passward);
}
参见这篇帖子:http://zhuyuehua.iteye.com/blog/1721715
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="zhuxuekui.data.UserlistMapper">
<resultMap id="userResultMap" type="Userlist">
<result property="username" column="username"></result>
<result property="passward" column="passward"></result>
</resultMap>
<select id="selectUserlist" parameterType="Map"
resultMap="userResultMap">
select * from userlist
where username = #{username} and passward = #{passward}
</select>
</mapper>
Model层:
package zhuxuekui.model;
public class Userlist {
public String username;
public String passward;
}
Service层:
package zhuxuekui.service;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.ibatis.builder.annotation.MapperAnnotationBuilder;
import org.apache.ibatis.session.SqlSession;
import zhuxuekui.data.UserlistMapper;
import zhuxuekui.model.Userlist;
public class SrvUserlist extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.getWriter().println("Hello World||||!");
super.service(req, res);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
// String resource = "/com/arthur/data/Configuration.xml";
// Reader reader;
// try {
// reader = Resources.getResourceAsReader(resource);
// Constants.SQL_FACTORY = new SqlSessionFactoryBuilder()
// .build(reader);
// } catch (Exception e) {
// e.printStackTrace();
// e.printStackTrace(res.getWriter());
// }
String username = req.getParameter("username");
String passward = req.getParameter("passward");
//
// System.out.println("账号: "+username);
// System.out.println("密码:"+passward);
SqlSession session = Constants.SQLFactory().openSession();
//UserlistMapper userMapper =session.getMapper(UserlistMapper.class);
// Userlist userlist = userMapper.selectUserlist(username);
//加载映射 ,与 userlistMapper挂钩 ,就是一条sql语句
UserlistMapper mapper = session.getMapper(UserlistMapper.class);
//从数据库当中选择一条对的语句,进行比对。返回一条记录
Userlist userlist = mapper.selectUserlist(username,passward);
if (userlist !=null) {
//res.getWriter().println("there is no user with name" + username);
String json = Constants.GSON.toJson(userlist);
res.getWriter().println(json);
}
else {
res.getWriter().println("there is new reader with name" + username);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
this.doGet(req, resp);
//String userName = req.getParameter("username");
String username = req.getParameter("username");
String passward = req.getParameter("passward");
System.out.println("账号: "+username);
System.out.println("密码:"+passward);
SqlSession session = Constants.SQLFactory().openSession();
UserlistMapper mapper = session.getMapper(UserlistMapper.class);
Userlist userlist = mapper.selectUserlist(username,passward);
if (userlist != null) {
resp.setStatus(200);
} else {
resp.sendError(345, "用户名密码不正确!");
}
}
}
服务器端调试界面:

客户端代码:
package com.buu.play.aa;
import org.apache.http.Header;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.Toast;
import com.buu.play.BMapApiDemoMain;
import com.buu.play.DemoApplication;
import com.loopj.android.http.AsyncHttpClient;
import com.loopj.android.http.BaseJsonHttpResponseHandler;
import com.loopj.android.http.RequestParams;
public class LoginActivity extends Activity implements OnClickListener {
static final String TAG = "ahttp";
private EditText etName, etPsw;
private Button btnLogin;
AsyncHttpClient httpClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
httpClient = DemoApplication.instance().asyncHttpClient;
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.setPadding(25, 25, 25, 25);
setContentView(ll);
etName = new EditText(this);
etName.setHint("用户名");
ll.addView(etName, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
etPsw = new EditText(this);
etPsw.setHint("密码");
ll.addView(etPsw, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
btnLogin = new Button(this);
btnLogin.setText("登 录");
btnLogin.setOnClickListener(this);
ll.addView(btnLogin, LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
}
@Override
public void onClick(View v) {
// Intent intent = new Intent(LoginActivity.this,
// BMapApiDemoMain.class);
// LoginActivity.this.startActivity(intent);
if (!isValid()) {
Toast.makeText(LoginActivity.this, "用户名密码没有填写", Toast.LENGTH_LONG)
.show();
// 用户名密码没有填写
return;
}
//
// TODO do request
RequestParams param = new RequestParams();
param.put("username", etName.getText().toString());
param.put("passward", etPsw.getText().toString());
httpClient.post("http://192.168.1.106:8080/login", param,
new BaseJsonHttpResponseHandler<Object>() {
@Override
public void onSuccess(int statusCode, Header[] headers,
String rawJsonResponse, Object response) {
Log.d(TAG, rawJsonResponse);
Intent intent = new Intent(LoginActivity.this,
BMapApiDemoMain.class);
LoginActivity.this.startActivity(intent);
finish();
}
@Override
public void onFailure(int statusCode, Header[] headers,
Throwable throwable, String rawJsonData,
Object errorResponse) {
// Intent intent = new Intent(LoginActivity.this,
// BMapApiDemoMain.class);
// LoginActivity.this.startActivity(intent);
// finish();
Toast.makeText(LoginActivity.this, "用户名密码错误",
Toast.LENGTH_LONG).show();
}
@Override
protected Object parseResponse(String rawJsonData,
boolean isFailure) throws Throwable {
Log.d(TAG, rawJsonData);
return rawJsonData;
}
});
}
private boolean isValid() {
return etName.getText().length() > 0 && etPsw.getText().length() > 0;
}
}
改进:1)客户端:没有做注册,只做了一个登陆。后期可能需要优化。
2)服务器端:只尝试了序列号的方法,后期尝试hashmap方法。
android客户端向服务器端验证登陆方法的实现1的更多相关文章
- android客户端向服务器端验证登陆方法的实现2
一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html android获取web服务 ...
- Android客户端和服务器端数据交互
网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第四种: 一.服务器端: 代 ...
- android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...
- (转)android客户端从服务器端获取json数据并解析的实现代码
今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 复制代码 ...
- android客户端从服务器端获取json数据并解析的实现代码(重要)
首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exc ...
- Android客户端与服务器端通过DES加密认证
转载地址:http://blog.csdn.net/spring21st/article/details/6730283 由于Android应用没有像web开发中的session机制,所以采用PHPS ...
- Android客户端向服务器端发送数据的流程(1)
原理: android客户端通过使用org.apache.http.impl.client.DefaultHttpClient类来发送数据; 方法介绍: HttpClient是android中提供的一 ...
- 数据加密,android客户端和服务器端可共用
安卓中,不管是内网还是外网,数据的传输首要考虑就是安全问题,尤其是用户信息,以及各种密码等敏感信息. 所以说,对数据的加密是很有必要的,尤其是当下物联网蓬勃发展的今天,数据安全尤为重要. 数据加密的方 ...
- app开发历程————Android程序解析服务器端的JSON格式数据,显示在界面上
上一篇文章写的是服务器端利用Servlet 返回JSON字符串,本文主要是利用android客户端访问服务器端链接,解析JSON格式数据,放到相应的位置上. 首先,android程序的布局文件main ...
随机推荐
- Convolutional Networks for Image Semantic Segmentation
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/52857657 把前段时间自己整理的一个 ...
- Spring 4.3.11.RELEASE文档阅读(二):Core Technologies_AOP
虽然并不是每个问题都有答案,但我想了很多问题.so, just write it down , maybe one day...... AOP: 1,AOP是啥 2,AOP思想是怎么产生的 3,AOP ...
- API生命周期
这一系列的文章,主要是结合了参加Oracle code之后对于API治理的记录收获,以及回到公司后,根据公司目前的一些现状,对此加以实践的过程总结 API生命周期通常包括八个内容,而安全策略贯穿始终. ...
- 【转】深入JVM系列(一)之内存模型与内存分配
http://lovnet.iteye.com/blog/1825324 一.JVM内存区域划分 大多数 JVM 将内存区域划分为 Method Area(Non-Heap),Heap,Progr ...
- [JSOI2016] 最佳团队 (树形DP+01分数规划)
Description JSOI信息学代表队一共有N名候选人,这些候选人从1到N编号.方便起见,JYY的编号是0号. 每个候选人都由一位编号比他小的候选人Ri推荐.如果Ri=0则说明这个候选人是JYY ...
- P4551 最长异或路径 (01字典树,异或前缀和)
题目描述 给定一棵 n 个点的带权树,结点下标从 1 开始到 N .寻找树中找两个结点,求最长的异或路径. 异或路径指的是指两个结点之间唯一路径上的所有边权的异或. 输入输出格式 输入格式: 第一行一 ...
- Miracast HDCP 等知识
Miracast 通讯架构中关于视频数据处理流程的部分.整个视频数据处理及传输的流程,大致上分为几个阶段,一开始将撷取到系统的画面及声音进行压缩,而压缩后的影音数据再转为基本封包串流(Packetiz ...
- JS当中利用&&和||简化代码
; ){ add_level = ; } ){ add_level = ; } ){ add_level = ; } ){ add_level = ; } else { add_level = ; } ...
- css选择器浅谈
css选择器有很多,种类的话总结起来有5种.即: id选择器,class选择器,elements选择器,级联选择器,相邻选择器. 前三个没什么好说的,分别是id,class和标签的选择,注意选中对象的 ...
- Drupal service module 介绍
https://www.ostraining.com/blog/drupal/services/ https://www.drupal.org/node/1246470 https://www.dru ...