android客户端向服务器端验证登陆方法的实现1

遇到的问题:一个条件查询与多个条件查询,所用到的方式不一样

参考文档: http://www.oschina.net/question/1160609_133366   
mybatis多条件查询的一个错误

解决方案如下:

利用序列号的方式解决多个参数的查询问题。对象与数据库关系的映射层。

层次结构如下:

首先定义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);
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

参见这篇帖子: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>
    

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

Model层:

package zhuxuekui.model;
 
public class Userlist {
 
    public String username;
    
    public String passward;
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

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, "用户名密码不正确!");
        }
    }
}
 

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

服务器端调试界面:

客户端代码:

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;
    }
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

改进:1)客户端:没有做注册,只做了一个登陆。后期可能需要优化。

2)服务器端:只尝试了序列号的方法,后期尝试hashmap方法。

android客户端向服务器端验证登陆方法的实现1,布布扣,bubuko.com

时间: 2024-10-24 18:04:11

android客户端向服务器端验证登陆方法的实现1的相关文章

android客户端向服务器端验证登陆方法的实现2

一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html      android获取web服务器端session并验证登陆 http://blog.csdn.net/cainiao123hack/article/details/8255848   服务器端向Android客户端传值--登录实现 http://zhidao.baidu.com/link?url=8g9EWhyUkUgUr1dh

Android 客户端与服务器端进行数据交互(一、登录服务器端)

概要 安卓APP要实现很多功能(比如登录注册.发表评论等)时都必须要使用到网络数据交互.所以在学习了这部分内容后,就将其以最常见的登录过程为例整理出来,也方便跟我一样的新手能迅速学习上手. 预期效果图如下,输入手机号和密码,点击Login按钮,上传数据到服务器端进行验证,再对结果进行反馈. 博客分一二两篇,第一篇是服务器端,第二篇是Android客户端 而服务器端分为User model.UserDAO.LoginServlet三个部分,只写了用户登录验证流程中最简单的实现逻辑,仅供参考. Us

Android客户端和服务器端数据交互

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍一下代码最简单.逻辑最清晰的交互例子: 一.服务器端: 二.Android手机客户端:

Android客户端请求服务器端的详细解释

Android客户端请求服务器端的详细解释 1. Android客户端与服务器端通信方式: Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式. 2. 解析服务器端返回数据的解释: (1).对于服务器端来说,返回给客户端的数据格式一般分为html.xml和json这三种格式. (2). JSON(Javascript Object Notation)是一种轻量级的数据交换格式,相比于xml这种数据交换格式来说,因为解析xml比

Android 客户端与服务器端进行数据交互(二、登录客户端)

概要 Android客户端分为User,HttpUtil,HttpCallbackListener,MainActivity四个部分.User model与服务端的一样,一方面是用于本地用户信息的存储model,另一方面也是为了保证构造URL时使用的key一致. HttpUtil封装了发送Http请求的过程和构造URL的函数,HttpCallbackListener是用于发送请求后的回调接口,MainActivity就是用于测试的Activity交互界面了. User model 不再贴出,见上

Android客户端和服务器端数据交互的第二种方法

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第二种: 一.服务器端: 代码1:添加名为"AndroidServerServlet.java"的文件 package com.ghj.packageofservlet; import java.io.IOException; import java.io.PrintWriter; import javax.serv

Android客户端和服务器端数据交互的第三种方法

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第三种: 一.服务器端: 代码1:添加名为"AndroidServerServlet.java"的文件 package com.ghj.packageofservlet; import java.io.IOException; import java.io.PrintWriter; import javax.serv

Android客户端和服务器端数据交互的第四种方法

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍几种代码简单.逻辑清晰的交互例子,本篇博客介绍第四种: 一.服务器端: 代码1:添加名为"AndroidServerServlet.java"的文件 package com.ghj.packageofservlet; import java.io.IOException; import java.io.PrintWriter; import javax.serv

Android客户端与服务器端通过DES加密认证

转载地址:http://blog.csdn.net/spring21st/article/details/6730283 由于Android应用没有像web开发中的session机制,所以采用PHPSESSID的方式,是没有办法获取客户端登录状态的. 这种情况下,如何在用户登录后,服务器端获取用户登录状态并保持,就必须采用一种“握手”的方式. 每个手机都有自己的IMEI号,那么能不能通过这个标识去做认证呢? 经过试验,答案是可以! 客户端在请求服务器端的时候,请求参数为 IMEI (param