1. 程式人生 > >JSP簡單分析:使用者登入(一)

JSP簡單分析:使用者登入(一)

以下是簡單的分析jsp如何進行使用者登入,程式碼有省略如需要匯入的包,預設可以直接使用。專案名稱設為test。

這裡採用了MVC架構,簡單說明下我對MVC以及專案中各個分層的理解(不全面,說到哪兒算哪兒)。M=Model,model這個東西呢主要是將資料庫裡的表對映成一個實體,欄位就是它們的屬性,就是我們說的JavaBean,這樣程式可以直接對這個物件進行操作,一般我們會在src資料夾裡建一個com.test.model,裡面的存放這些對映的實體類,主要由屬性和get/set方法構成。

我們還會看到service層,這個層主要是呼叫select、update、delete、save等方法實現對物件資料的操作。

util層主要是工具類,一般把常用的例如連線資料庫的操作放在這裡。

下面來分析下使用者登入的基本思路:

建立資料庫——對映實體類——使用者輸入使用者名稱密碼——接收使用者名稱密碼——在資料庫中進行匹配——返回結果

一、建立資料庫

資料庫建立過程忽略,主要建立一個usertable表,裡面有name和pwd兩個欄位。然後在DBUtil內寫好資料庫連線類以便後期需要連線資料庫時使用。

com.test.util
public class DBUtil{
	public connection getConnection(){//獲取連線方法,返回connection連線
		try{
			class.forName("com.mysql.jdbc.Driver");//載入驅動
			String URL=jdbc:mysql://172.20.5.201:3306/testdb;//資料庫地址
			String USER="root";//使用者名稱
			String PWD="password";//密碼
			Connection conn=DriverManager.getConnection(URL,USER,PWD);//獲取連線
		}catch(Exception e){
			e.printStackTrace();
		}
		return conn
}

二、對映實體類

根據usertable表建立這個實體類,屬性對應欄位,主要為get/set方法,程式可以通過這個類操作資料庫;該類放在model層。

com.test.model
class UserTable{//與資料庫的usertable表相對應
	private String name;//對應name欄位
	private String password;//對應pwd欄位
	public void setName(String name){//set方法
		this.name=name;
	}
	public String getName(){//get方法
		return name;
	}
	public void setPassword(String password){
		this.password=password;
	}
	public String getPassword(){
		return password;
	}
}

三、使用者輸入使用者名稱密碼

使用者的輸入功能主要在jsp呈現,這裡建立一個login.jsp,上面放使用者名稱和密碼的輸入框。

<link rel="stylesheet" type="text/css" href="style.css">//href表示引用的css路徑
<form action="varify.jsp" name="login" method="post">//action表示跳轉到處理頁面,name是表單名稱,method是請求方式
	<input type="text" name="user">//根據name值獲取input的value
	<input type="password" name="password">//根據name值獲取input的value
	<input type="submit">//提交按鈕
</form>

form表單的action表示使用者填寫的使用者名稱密碼將跳轉到varify.jsp頁面處理,method指傳送的方式,網上有很多post和get的不同之處的詳解,這邊只淺顯的介紹下:1)get用於獲取資料,post用於提交資料;2) get引數有長度限制,post無限制。

四、接收使用者名稱密碼

我們用varify.jsp來處理接收的使用者名稱和密碼。首先要先接收,然後根據這個使用者名稱和密碼去資料庫匹配,最後返回結果。在這個頁面我們使用了jsp:useBean和jsp:setProperty;jsp:useBean是一個JSP動作指令,表示裝載一個將在JSP頁面中使用的JavaBean,jsp:setProperty是為已經例項化的JavaBean的屬性賦值。

<jsp:useBean id="user" class="com.test.model.userTable"></jsp:useBean>//id表示useBean的唯一標識,class表示bean的路徑
<jsp:useBean id="userservice" class="com.test.service.UserService"></jsp:useBean>
<jsp:setProperty property="*" name="user">//*表示傳遞的所有引數,name是複製的javaBean
<%//處理邏輯
	if(userservice.verify(user)){
		out.print("success");
	}else{
		out.print("error");
	}
%>

這段程式中,我們先宣告該jsp頁面使用的javaBean是user(指定是上面model的實體類),然後通過setProperty為這個javaBean的所有屬性賦值。我們再寫一個處理類來處理接收到使用者名稱密碼到資料庫進行匹配。

五、資料庫匹配

我們把這個業務處理寫在service層。varify.jsp呼叫UserService這個javaBean,然後呼叫其verify方法去資料庫驗證。

com.test.service
class UserService{
	private Connection conn;
	private PreparedStatement ps;
	pulic UserService(){
		conn=new DBUtil.getConnection();//獲取連線
	}
	public boolean verify(UserTable user){
		try{
			sql="select * from usertable where name=? and pwd=?";//SQL語句
			ps=conn.PreparedStatement(sql);
			ps.setString(1,user.getName);//填補sql語句中的第一個?
			ps.setString(2,user.getPassword);//填補sql語句中的第二個?
			ResultSet rs=ps.executeQuery();//執行sql語句
			if(rs.next()){
				return true;
			}else{
				return false;
			}
		}catch(SQLException e){
			e.printStackTrace();
			return false;
		}
	}
} 

六、返回結果

varify.jsp頁面使用java程式碼寫根據資料庫返回的結果進行的操作,如果資料庫匹配成功,就在頁面顯示success;反之顯示error。