1. 程式人生 > >Android客戶端+mysql+springmvc伺服器端實現登陸的小案例

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<String, String> json;
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("<<<<<<<<<<<R O T K~!>>>>>>>>>>>");
System.out.println("username = "+username+" password = "+password);

json = new HashMap<String, String>();

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;


}

    
}  


相關推薦

Android客戶+mysql+springmvc伺服器實現登陸案例

首先是客戶端 通過輸入使用者名稱+密碼實現登入 點選登入後向伺服器傳送http請求 伺服器收到請求後驗證使用者名稱密碼是否與mysql資料庫上的相應欄位是否一致 然後返回json資料 客戶端獲取響應的結果 然後提醒是否登入成功 MainActivity程式碼: public

實現Android客戶與Eclipse伺服器基於Okthhp簡單通訊

最近在重溫知識,所以藉此機會也想把自己寫的一些心得寫出來供大家分享,寫的有誤或者不好的地方望大家見諒,好了,廢話少說,直接進入正題,下面給大家介紹的就是基於目前主流網路通訊框架的okhttp實現的Android與Eclipse通訊。首先說明:我用的Android客戶端是And

Android客戶與Tomcat伺服器通訊實現登入驗證

一.功能描述   在Android客戶端實現登入介面,當將使用者名稱和密碼填入文字框並點選登入按鈕時,將認證資訊傳送至Tomcat伺服器進行認證,若使用者名稱和密碼匹配,則Android客戶端提示登入成功,否則提示登陸失敗。 二.開發環境 Android客戶端:Andro

Android客戶和Java伺服器整合支付寶

一、申請移動支付許可權 首先登入【支付寶開放平臺】http://open.alipay.com/platform/home.htm,新增應用,申請移動支付許可權。申請開通支付,是需要公司檔案的,個人是不允許開始支付的。 具體細節就不再詳聊了,下面就講講如何將阿里給出的demo執行起來。 二、阿里支付D

Android客戶與java伺服器的Socket連線

開發十年,就只剩下這套架構體系了! >>>   

記筆記:C# Socket客戶監聽伺服器處理方案【同步】

方案主要功能:        (1)客戶端同步監聽來自伺服器端的資料(開啟子執行緒監聽)        (2)客戶端向伺服器端傳送資料(主執行緒傳送,並控制)        

【TCP通訊】多客戶連線一個伺服器總結

Windows下TCP通訊,多個客戶端連線伺服器端。 一、伺服器端流程實現如下: 1、通過socket函式,建立基於流式型別的socket,可名為serverSocket; 2、呼叫bind函式,繫結本地的監聽埠號和本地IP地址; 3、呼叫listen函式,開始監聽客戶端請求。其中該函式第二個引數指定了最大

WebService 安卓客戶呼叫和伺服器搭建

這段時間做了一個小程式,想通過WebService來供安卓客戶端呼叫。先說一下安卓端的程式。之前沒有進行過安卓+Java的程式設計,就先找網上的一個查詢手機號碼歸屬地例子來測試WebService。 在Android平臺呼叫Web Service需要依賴於第三

安裝oracle 11g 64位伺服器和oracle 11g 32位客戶時,客戶無法連線伺服器的問題。

1.按照網上教程安裝64位伺服器端Oracle和32位客戶端Oracle,在開始選單點選client檔案下的Net Configuration Assistant,如圖所示 2.本地網路服務配置->新增->服務名為orcl->選擇TCP->主機名

關於客戶與資料庫伺服器的時間同步問題

這是一個做C/S的管理軟體開發時經常被忽略的問題,客戶端的時間與伺服器的時間如果有偏差,資料統計、報表等等肯定會有“意外”的情況發生。 意圖很簡單:從資料庫伺服器獲取到時間,根據這個時間修改當前客戶端電腦時間。 用Sql的函式getdate(),是比較容易的。 我們是基於do

Android實戰簡易教程-第六十六槍(伺服器搭建和伺服器Json資料互動)

學習Android有一段時間了,對伺服器端有很深的好奇,決定對伺服器端的實現進行一些研究,這裡實現了一個簡單的小例子,用於獲取伺服器端的json資料,例子很簡單,適合初學者學習使用。伺服器端首先我們搭建伺服器端,伺服器端使用struct2架構,對該架構不熟悉的人可以花一點時間

VTP配置伺服器server和客戶client,客戶會學習伺服器的VLAN

這種標題,看到就方了,什麼是VTP,trunk、channel這些配置過相關的命令,但是我不理解啊,這樣還能搭小型區域網絡? 本來是要求用dns3、或者eve做的實驗的,因為這兩款模擬器可以模擬真機,然後抓包,天天抓包,天天抓包,果然是學網路了 但是.....!!! 由於我

SpringMVC伺服器校驗-有配置檔案

Hibernate-validator進行驗證 配置beans.xml檔案,如下: <!-- 預設的註解對映的支援 --> <mvc:annotation-driv

Android---49---使用ServerSocket建立伺服器

 使用ServerSocket建立伺服器端: Java中能夠接受其他通訊實體連線請求的是ServerSocket,ServerSocket物件用於監聽來自客戶端的Socket連線。 如果沒有連線,它將一直處於等待狀態。 ServerSocket構造方法:

Redis如何通過本機客戶訪問遠端伺服器

 預設無許可權控制: 遠端服務連線: $ redis-cli -h 127.0.0.1 -p 6379 windows下 :redis-cli.exe -h 127.0.0.1 -p 6379   redis 127.0.0.1:6379> 遠端服務停止

android 上傳Bitmap到伺服器

先來客戶端程式碼【這裡只寫了主要程式碼】 先來張效果圖, iv_photo.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { new ActionSheetDialog(S

用PHP寫出客戶IP和伺服器IP

客戶端的ip變數: $_SERVER['REMOTE_ADDR'] :客戶端IP,也有可能是代理IP $_SERVER['HTTP_CLIENT_IP']:代理端的IP,可能存在,也可能偽造 $_SERVER['HTTP_X_FORWARD_FOR'] :

Android 下使用 JSON 與伺服器 Servlet 傳遞資料

        在Android下,SDK已經封裝好了與JSON相關的操作,伺服器端也只要匯入相關JAR包即可,這裡先放上我的小demo原始碼,android端和servlet的demo分別在兩個資料

客戶傳遞到伺服器後資料顯示為亂碼的解決辦法

當通過頁面提交的方式,或者通過AJAX的方式將客戶端使用者的輸入資料傳遞到後臺頁面進行處理的時候,非常有可能會出現後臺獲取到的中文輸入或者一些其他怪異字串變為“????”或其他亂碼的問題,這個時候,如果你檢視站點的Web.config檔案的話,在這個欄位<globali

安卓app上傳檔案到springMVC伺服器的問題

先上程式碼,上傳檔案的封裝工具類如下: import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; imp