android客戶端向服務器端驗證登陸方法的實現1


遇到的問題:一個條件查詢與多個條件查詢,所用到的方式不一樣

參考文檔: http://www.oschina.net/question/1160609_133366    mybatis多條件查詢的一個錯誤

解決方案如下:

利用序列號的方式解決多個參數的查詢問題。對象與數據庫關系的映射層。我們也可以用hashmap實現。

層次結構如下:

image

     首先定義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, "用戶名密碼不正確!");
        }
    }
}
 

服務器端調試界面:

image

客戶端代碼:

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方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM