1. 程式人生 > >Java業務邏輯結合MySQL實現登入註冊(XMPP協議的運用)

Java業務邏輯結合MySQL實現登入註冊(XMPP協議的運用)

XMPP協議:

通訊協議是一種約定的規則,XMPP也無外乎是一種介面規則。簡單的說XMPP協議是一種標記格式的文字串。

舉例:

<msg><send>hxjava</send><content>helloworld</content></msg>


學習了XMPP協議之後,就實現C/S的登入註冊操作,這一次的登入操作就不像以前那樣用一些Map容器儲存資料了。

儲存資料要用資料庫,這樣不僅便於資料管理維護,而且資料不容易丟失,建立Map容器儲存的話,程式關閉資料就消失了。

我自己編寫C/S登入程式應用的到XMPP協議是:

<msg>
<name></name>
<psw></psw>
<tel></tel>
<email></email>
</msg>

因為僅僅是做練習,所以編寫的程式碼就比較的簡陋,資料庫儲存的資訊只有5個,使用者資訊:

id,name,password,tellphone,email

建立表格:

我用的是16.5版本的powerDesigner


建立表格之後,以sql的語言格式匯出,然後再用Navicat for MySQL軟體執行SQL語言,然後就得到了一個空表。


寫java的程式過程不多說,等下直接把程式碼發出來再做解釋。

先看過程

介面與程式碼測試:

註冊介面,當我填完註冊資訊按下注冊按鈕的時候,連線上伺服器,然後傳送一個XMPP協議的字串給伺服器,伺服器解析,然後新增到資料庫,EOF異常是關閉了連線的原因。


註冊了之後表裡有兩個賬號了,測試登入系統:

輸入一個正確的賬號密碼:


輸入第二個正確的賬號密碼:


第三次輸入一個錯誤的使用者名稱和密碼:


登入註冊系統的總結:

這個專案的測試完成了,基本功能已經全部實現了,體現了XMPP協議的約定與解析,實現了dao層與Java業務邏輯的結合,用資料庫裡面的資料來驗證使用者,使程式更可靠,維護性更強。

程式碼:

伺服器核心的程式碼是socket的連線與服務,之間有XMPP協議要解析,因為只是要測試註冊於登入功能,所以我就不建立太多的類去封裝了,驗證登入和註冊新增的程式碼只是封裝在方法中去,自定義一個客戶端執行緒類SocketThread,其中的run方法用死迴圈來執行登入或者註冊方法:

run方法

public void run() {
		try{
			String Msg = null;
			while(true){
				Msg = ois.readUTF();
				String type = this.getType(Msg, "type");
				if("createUser".equals(type)){
					this.CreatUser(Msg);
				}else if("loginUser".equals(type)){
					this.LoginUser(Msg);
				}
				Msg = null;
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}


解析XMPP的方法:

public String getType(String str,String type){//處理字串
		System.out.println("已經進入了getType方法,獲取的Msg為:   "+str);
		int beginIndex = str.indexOf("<"+type+">");
		int endIndex = str.indexOf("</"+type+">");
		String value = str.substring(beginIndex+2+type.length(), endIndex);
		System.out.println("獲取的value是:   "+value);
		return value;
	}

註冊新使用者的方法:

public void CreatUser(String Msg){
		System.out.println("伺服器已經進入了CreatUser方法...");
		String name = this.getType(Msg, "name");
		String password = this.getType(Msg, "psw");
		String tellphone = this.getType(Msg, "tel");
		String email = this.getType(Msg, "email");
		System.out.println(name+"  "+password+"  "+tellphone+"  "+email);
		UserDatapojo udp = new UserDatapojo(2,name,password,tellphone,email);
		try {
			new UserDatadaoimpl().insert(udp);
			System.out.println("資料已經存進資料庫...");
			oos.writeUTF("使用者註冊成功...");
			oos.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

登入的方法:

public void LoginUser(String Msg)throws Exception{
		String name = this.getType(Msg, "name");
		String password = this.getType(Msg, "psw");
		boolean s = new UserDatadaoimpl().query(name,password);
		if(s){
			System.out.println("登入成功...");
			oos.writeUTF("登入成功...");
			oos.flush();
			return ;
		}
		System.out.println("登入失敗...");
		oos.writeUTF("登入失敗...");
		oos.flush();
	}

客戶端的註冊方法:

public void actionPerformed(ActionEvent e) {
		if("註冊".equals(e.getActionCommand())){
			String type = "<type>createUser</type>";
			String name = "<name>"+nameField.getText()+"</name>";
			String psw = "<psw>"+pswField.getText()+"</psw>";
			String tel = "<tel>"+telField.getText()+"</tel>";
			String email = "<email>"+mailField.getText()+"</email>";
			String CreatUserMsg = "<msg>"+type+name+psw+tel+email+"</msg>";
			System.out.println(CreatUserMsg);
			Client socket = Client.getInstance();
			socket.getConnection();
			System.out.println("客戶端已連線上伺服器...");
			try {
				socket.getOos().writeUTF(CreatUserMsg);
				socket.getOos().flush();
				System.out.println("已傳送XMPP協議給伺服器...");
				System.out.println(socket.getOis().readUTF());;
				socket.closeConnection();
			} catch (Exception e1) {
				e1.printStackTrace();
			}
			System.out.println("執行了註冊功能..");
		}
	}

客戶端的登入方法:

if("登入".equals(e.getActionCommand())){
			String type = "<type>loginUser</type>";
			String name = "<name>"+userField.getText()+"</name>";
			String psw = "<psw>"+pswField.getText()+"</psw>";
			String CreatUserMsg = "<msg>"+type+name+psw+"</msg>";
			System.out.println(CreatUserMsg);
			Client socket = Client.getInstance();
			socket.getConnection();
			System.out.println("客戶端已連線上伺服器...");
			try {
				socket.getOos().writeUTF(CreatUserMsg);
				socket.getOos().flush();
				System.out.println("已傳送XMPP協議給伺服器...");
				System.out.println(socket.getOis().readUTF());;
				socket.closeConnection();
			} catch (Exception e1) {
				e1.printStackTrace();
			}
			System.out.println("執行了登入功能..");
		}

想更多瞭解XMPP協議請看: