1. 程式人生 > >【超越夢想】Android+Servlet搭建自己的app(4-3)——伺服器端註冊實現

【超越夢想】Android+Servlet搭建自己的app(4-3)——伺服器端註冊實現

上一篇我們在伺服器端接收到資料,剩下就是將資料插入到資料庫了。在插入資料庫之後再返回一個值,來反映註冊成功。不多少,上程式碼

(一)RegisterDao


public interface RegisterDao {
    public int register(User user);
}

(二)RegisterDaoImpl

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;


public class RegisterDaoImpl  implements
RegisterDao{
@Override public int register(User user) { String sql = "insert into user(username,password) values(?,?)"; Connection conn = ConnectionUtil.open(); try { PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, user.getUsername()); pstmt.setString(2
, user.getPassword()); if(pstmt.executeUpdate()>0){ return 1; } }catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ ConnectionUtil.close(conn); } return
-1; } }

(三)RegisterServlet






import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;



/**
 * Servlet implementation class RegisterServlet
 */
@WebServlet("/RegisterServlet")
public class RegisterServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public RegisterServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        BufferedReader reader = request.getReader();
        String json = reader.readLine();
        User user = null;
        Gson gson = new Gson();
        java.lang.reflect.Type type = new TypeToken<User>(){}.getType();    
        user = gson.fromJson(json, type);
        RegisterDao dao = new RegisterDaoImpl();
        int i = dao.register(user);

            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.println(""+i);


    }

}

(四)RegisterActivity


import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.io.PrintWriter;
import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.net.URL;

public class RegisterActivity extends AppCompatActivity {
    EditText username;
    EditText password;
    Button Register;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);
        username = (EditText)findViewById(R.id.username);
        password = (EditText)findViewById(R.id.password);
        Register = (Button)findViewById(R.id.register);

        Register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String Username = username.getText().toString();
                String Password = password.getText().toString();
                User user = new User();
                user.setUsername(Username);
                user.setPassword(Password);
                Gson gson = new Gson();
                Type type = new TypeToken<User>(){}.getType();
                String jsonstr = gson.toJson(user,type);

                String url = "http://192.168.31.220:8080/test/RegisterServlet";
                new RegisterTask().execute(url,jsonstr);
            }
        });

    }

    class  RegisterTask extends AsyncTask<String,Integer,String> {
        @Override
        protected String doInBackground(String... params) {
            String par  = params[0];
            String jsonstr = params[1];
            URL url = null;
            try {
                url = new URL(par);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
            String result = HttpUtil.doJsonPost(url,jsonstr);
            return result;
        }
        //第四步
        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
           int i = Integer.parseInt(result);
            if(i==1){
                Toast.makeText(getApplicationContext(),"註冊成功",Toast.LENGTH_SHORT).show();
                return;

            }else {
                if(i ==-1){
                    Toast.makeText(getApplicationContext(),"註冊失敗",Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        }
    }
}

執行結果如下

客戶端:

這裡寫圖片描述

資料庫:
這裡寫圖片描述

在前邊的基礎上,在RegisterActivity中添加了一個判斷,註冊成功或者失敗都給出一個Toast提示。
在伺服器端呢,先建立一個介面,然後是介面實現類,在介面實現類中完成資料庫的操作,然後在RegisterServlet中建立一個dao物件,呼叫register方法,將從客戶端傳過來的資料傳進去,得到的返回值為1或者-1,1則表示資料庫操作成功,-1表示不成功。再將這個值傳回去,在客戶端展示出來。

總體來說實現的過程還是很簡單的。到這裡已經實現了登入和註冊,我們已經能夠從客戶端傳送資料到伺服器端,也可以將資料從伺服器端返回到客戶端。從環境搭建到登入註冊,短短几篇就已經完成。看到這裡我相信肯定是有所收穫的。當然肯定有比我的程式碼更簡單的方法,有更成熟的方案,而我這裡只是能夠實現功能。如果有更好的方案也可在留言區留言。有疑問的地方請在留言區留言,也請各位大佬批評指正。