1. 程式人生 > >用spring boot搭建一個最簡單的使用者登入介面,其艱難歷程!

用spring boot搭建一個最簡單的使用者登入介面,其艱難歷程!

   目前的Java專案中,最基本的包括:controller層、service層、dao層,當然還用entity實體層。

controller層,顧名思義,就是控制器,控制各個層面的動作。

service層,其中寫了具體的方法,具體怎樣的實現,就在其中寫著。

dao層,去資料拿取資料的地方。

就比如說我們,我們要說的這個,一個簡單的使用者登入介面。

首先,我們輸入網址,我們首先工作的就是controller層,我們通過controller層去呼叫前臺的HTML檔案,然後我們看到了一個前臺介面。

接下來,我們就要開始,輸入使用者名稱和密碼了吧。我們在前臺介面中輸入了使用者名稱和密碼,然後點選“登入”,提交我們所填的資訊。然後前臺介面會根據我們預先寫好的介面,又將使用者資訊(使用者名稱和密碼)提交到了,controller層。

然後,controller層收到前臺傳來的資訊後,又將我們的資訊,傳輸到了service層的方法中,與此同時,我們也通過了service層訪問到了dao層。

dao層去到資料庫拿到了資料庫中的資料(資料庫中的使用者名稱和密碼),然後又回到了service層。此時,兩種不同來源的資料就要開始做比較了。若是,兩組資料相同,則代表登陸成功,然後,service層告訴controller層驗證通過了,可以讓使用者進入下一步啦,然後controller層又去呼叫了登入成功的頁面。否則的話,就是service通知controller層驗證失敗,就又去呼叫了登陸失敗的頁面或者是返回原頁面繼續登入。

好,我們大概的說了一下具體的流程,接下來,我們看看他具體是怎樣操作的????????????????????????????

第一步 新建一個spring boot 專案(我用的是sts)

取完名字後,然後選取所需要或可能需要用到的配置

我們選取了,web,JDBC,JPA,Thymeleaf。然後繼續點選next,finsh,一個spring boot專案就構建完成了。

接下來,我們看到的是這樣一個頁面

這是spring boot專案的一個啟動類,我們以後每次啟動這個專案時都要在這個類裡面啟動。我們不妨來看一下,我們所建立的一個基本的spring boot專案,其檔案內容:

其中,首先是三個檔案第一個檔案是存放Java程式碼的,其中的com.example.smalldemo就是存放啟動類的包,這個包裡最好不要再放入其他類了或檔案了(只是一個小建議),然後其他的四個包是我們後來新建的(取名字都要在啟動類所在包的下一級,不懂的看圖)。第二個檔案是存放各種資源的,static檔案中存放的是css檔案,js檔案,圖片等,templates檔案中存放的是HTML檔案,然後,application.properties是這個專案的一個配置檔案。第三個檔案,是測試檔案,具體還沒用到。

然後我們進行下一步

第二步  搭建一個數據庫,比在專案中配置資料庫

此次搭建資料庫,是我在mysql-Front中自己手動搭建的(以後會逐漸的更新搭建方法和在專案中搭建資料庫的方法)。

這次建庫,我只設定了五個欄位,兩條資料,基本的id,name,password欄位,對於這個專案就足夠用了,然後,在專案中配置好資料庫。

在application.properties配置檔案中如右圖所示,即可。

然後,我們需要寫入一個實體類,這次我們寫在了com.example.smalldemo.model中,程式碼如下

package com.example.smalldemo.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class UserBean {
	
	 @Id
	 @GeneratedValue(strategy = GenerationType.AUTO)
	
	private int id;
	private String name;
	private String sex;
	private long idcard;
	private long telphone;
	private String password;
	
	
	public String getpassword() {
		return password;
	}
	public void setpassword(String password) {
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public long getIdcard() {
		return idcard;
	}
	public void setIdcard(long idcard) {
		this.idcard = idcard;
	}
	public long getTelphone() {
		return telphone;
	}
	public void setTelphone(long telphone) {
		this.telphone = telphone;
	}

}

 註解“@Entity”說明了這是一個實體類,然後@Table(name="user")註解一定要加上,否則服務檯會報出一個“找不到資料庫表”的一個錯誤資訊。“@id”是生成一個主鍵(@Entity與@id註解,是同時使用的,不然的話會報錯),“@GeneratedValue(strategy = GenerationType.AUTO)”是一種主鍵生成策略。

第三步   寫前臺頁面

很簡單的那種,login.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<form name="" action="/yaoyao/user" method="post">
<table align="center">
<tr>
<td>
使用者名稱<input type="text" name="name" />
</td>
<td>
密碼<input type="password" name="password"/>
</td>

<td>
<input type="submit" name="tijiao" value="登入"/>
</td>

</tr>

</table>

</form>


</body>
</html>

我們用的是form表單提交,提交給controller層“<form name="" action="/yaoyao/user" method="post">”注意路徑,寫相對路徑即可,最好不要寫絕對路徑,我第一次就是寫了絕對路徑,最後錯誤報的“404”。下面的是,登入成功的介面:(wel.html)

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<h1>歡迎登入</h1>

</body>
</html>

好,我們的前臺介面和實體類都已經寫完了,資料庫也已經配置完,連線上了。然後,我們可以開始寫controller層了

第四步   編寫controller層

首先我們寫一個前臺介面的對映,前面我們說過,輸入網址後,我們會首先同過controller層,去呼叫前臺介面,對映程式碼如下:

package com.example.smalldemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;


@Controller
public class IndexController {

	@RequestMapping(value={"/login.go")
	public String userLogin(){
		//System.out.println("userLogin.do");
		return "login";
	}
}

然後我們會對前臺進行一些操作,然後,再編寫一個controller類,用來接收前臺傳來的資料:

package com.example.smalldemo.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.example.smalldemo.model.*;

import com.example.smalldemo.service.*;

@Controller
@RequestMapping("/yaoyao/")//介面註解
public class LoginController {
		
	@Autowired  //與service層進行互動
	private LoginClservice loginClService;
	
	
	@RequestMapping("user")
	public String getLoginCl(@RequestParam("name") String name,@RequestParam("password") String password){
		
		boolean b;
		b=loginClService.Find(name, password);//呼叫service層的方法
		System.out.println(name);
		System.out.println(password);
		
		if(b=true){
			
			return "wel";
		}
			
			return "login";
			
		}
		
		
	}
	

@RequestParam註解,就是用來接收前臺傳回來的資料,然後傳到service層,

package com.example.smalldemo.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.smalldemo.dao.*;
import com.example.smalldemo.model.*;

@Service
public class LoginClservice {
	
	
	@Autowired
	private Userdao userdao;//與dao層進行互動
	
	
	public boolean Find(String name,String password){
		boolean b=true;
		
		List <UserBean> All= userdao.findAll();//呼叫dao層方法,讀取資料庫資料
		System.out.println("================"+All);
		for(int i=0;i<=All.size();i++){//將資料庫中的資料全部拿出,一個一個比較,好在資料不多
			
			
			UserBean one=All.get(i);
			if(name.equals(one.getName())&&password.equals(one.getpassword())){//兩種渠道的得到的資料進行比較
				
				b=true;
				break;
			}else{
				
				b= false;
				break;
			}
						
			
		}
		
		return b;	
	}

}

在service層中,dao層獲取的資料與controller層傳來的資料進行比較,,,,下面是到dao層程式碼:

package com.example.smalldemo.dao;

import com.example.smalldemo.model.*;
import org.springframework.data.jpa.repository.JpaRepository;

public interface Userdao extends JpaRepository<UserBean,Integer>{
	
}

dao層通過jpa與資料庫進行了連線,

service層中,再將資料的比較結果返回到controller層,然後根據相應的返回結果,進行不同的頁面跳轉。最後奉上

完成圖:

初次寫部落格,寫的不好,望各位大神見諒。!!!!