【超越夢想】Android+Servlet搭建自己的app(4-3)——伺服器端註冊實現
阿新 • • 發佈:2019-02-04
上一篇我們在伺服器端接收到資料,剩下就是將資料插入到資料庫了。在插入資料庫之後再返回一個值,來反映註冊成功。不多少,上程式碼
(一)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表示不成功。再將這個值傳回去,在客戶端展示出來。
總體來說實現的過程還是很簡單的。到這裡已經實現了登入和註冊,我們已經能夠從客戶端傳送資料到伺服器端,也可以將資料從伺服器端返回到客戶端。從環境搭建到登入註冊,短短几篇就已經完成。看到這裡我相信肯定是有所收穫的。當然肯定有比我的程式碼更簡單的方法,有更成熟的方案,而我這裡只是能夠實現功能。如果有更好的方案也可在留言區留言。有疑問的地方請在留言區留言,也請各位大佬批評指正。