用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層,然後根據相應的返回結果,進行不同的頁面跳轉。最後奉上
完成圖:
初次寫部落格,寫的不好,望各位大神見諒。!!!!