關于JSP用戶登錄連接數(shù)據(jù)庫詳情
目錄
關于jsp用戶登錄連接數(shù)據(jù)庫詳情
1、首先創(chuàng)建po類
與數(shù)據(jù)庫一一對應
lombok生成get set方法
package com.ftzlover.demo.po; import lombok.getter; import lombok.setter; @getter @setter public class user { private integer userid; // 用戶id private string uname; // 用戶名稱 private string upwd; // 用戶密碼 private string nick; // 用戶昵稱 private string head; // 用戶頭像 private string mood; // 用戶簽名 }
2、創(chuàng)建底層userdao
這里就是所有創(chuàng)建好的層
3、創(chuàng)建userservice(一般都會調(diào)用userdao)
private userdao userdao = new userdao();
4、寫web層usersrevlet
注意:
public class userservlet extends httpservlet {
4.1 重寫方法
@override protected void service(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception {
4.2創(chuàng)建vo層并在里面創(chuàng)建resultinfo類用于封裝返回數(shù)據(jù)
創(chuàng)建狀態(tài)碼code 提示信息 返回對象
@getter @setter public class resultinfo<t> { private integer code; // 狀態(tài)碼 成功=1,失敗=0 private string msg; // 提示信息 private t result; // 返回的對象(字符串、javabean、集合、map等) }
5、開始從dao開始寫
dao層:(數(shù)據(jù)訪問層:數(shù)據(jù)庫中的增刪改查操作)通過用戶名查詢用戶對象, 返回用戶對象
獲取數(shù)據(jù)庫連接
package com.ftzlover.demo.dao; import com.ftzlover.demo.po.user; import com.ftzlover.demo.util.dbutil; import java.sql.connection; import java.sql.preparedstatement; import java.sql.resultset; /** * dao層:(數(shù)據(jù)訪問層:數(shù)據(jù)庫中的增刪改查操作) * 通過用戶名查詢用戶對象, 返回用戶對象 * 1. 獲取數(shù)據(jù)庫連接 * 2. 定義sql語句 * 3. 預編譯 * 4. 設置參數(shù) * 5. 執(zhí)行查詢,返回結(jié)果集 * 6. 判斷并分析結(jié)果集 * 7. 關閉資源 */ public class userdao { public user queryuserbyname(string username){ //首先創(chuàng)建對象 user user = null; connection connection = null; preparedstatement preparedstatement = null; //預編譯對象 resultset resultset = null; try { // 1. 獲取數(shù)據(jù)庫連接 connection = dbutil.getconnetion(); // 2. 定義sql語句 string sql = "select * from tb_user where uname = ?"; // 3. 預編譯 preparedstatement = connection.preparestatement(sql); // 4. 設置參數(shù) preparedstatement.setstring(1, username); // 5. 執(zhí)行查詢,返回結(jié)果集 resultset = preparedstatement.executequery(); // 6. 判斷并分析結(jié)果集 if (resultset.next()) { user = new user(); user.setuserid(resultset.getint("userid")); user.setuname(username); user.sethead(resultset.getstring("head")); user.setmood(resultset.getstring("mood")); user.setnick(resultset.getstring("nick")); user.setupwd(resultset.getstring("upwd")); } } catch (exception e) { e.printstacktrace(); } finally { // 7. 關閉資源 dbutil.close(resultset,preparedstatement,connection); } return user; } }
6、開始寫service層
package com.ftzlover.demo.service; import cn.hutool.core.util.strutil; import cn.hutool.crypto.digest.digestutil; import com.ftzlover.demo.dao.userdao; import com.ftzlover.demo.po.user; import com.ftzlover.demo.vo.resultinfo; /*service層:(業(yè)務邏輯層:參數(shù)判斷、業(yè)務邏輯處理) 1. 判斷參數(shù)是否為空 如果為空 設置resultinfo對象的狀態(tài)碼和提示信息 返回resultinfo對象 2. 如果不為空,通過用戶名查詢用戶對象 3. 判斷用戶對象是否為空 如果為空 設置resultinfo對象的狀態(tài)碼和提示信息 返回resultinfo對象 4. 如果用戶對象不為空,將數(shù)據(jù)庫中查詢到的用戶對象的密碼與前臺傳遞的密碼作比較 (將密碼加密后再比較) 如果密碼不正確 設置resultinfo對象的狀態(tài)碼和提示信息 返回resultinfo對象 5. 如果密碼正確 設置resultinfo對象的狀態(tài)碼和提示信息 6. 返回resultinfo對象 */ public class userservice { private userdao userdao = new userdao(); public resultinfo<user> userlogin(string username,string userpwd){ resultinfo<user> resultinfo = new resultinfo<>(); // 數(shù)據(jù)回顯:當?shù)卿泴崿F(xiàn)時,將登錄信息返回給頁面顯示 user u = new user(); u.setuname(username); u.setupwd(userpwd); // 設置到resultinfo對象中 resultinfo.setresult(u); // 1. 判斷參數(shù)是否為空 if (strutil.isblank(username) || strutil.isblank(userpwd)) { // 如果為空 設置resultinfo對象的狀態(tài)碼和提示信息 resultinfo.setcode(0); resultinfo.setmsg("用戶姓名或密碼不能為空!"); // 返回resultinfo對象 return resultinfo; } // 2. 如果不為空,通過用戶名查詢用戶對象 user user = userdao.queryuserbyname(username); // 3. 判斷用戶對象是否為空 if (user == null) { // 如果為空,設置resultinfo對象的狀態(tài)碼和提示信息 resultinfo.setcode(0); resultinfo.setmsg("該用戶不存在!"); // 返回resultinfo對象 return resultinfo; } // 4. 如果用戶對象不為空,將數(shù)據(jù)庫中查詢到的用戶對象的密碼與前臺傳遞的密碼作比較 (將密碼加密后再比較) // 將前臺傳遞的密碼按照md5算法的方式加密 userpwd = digestutil.md5hex(userpwd); // 判斷加密后的密碼是否與數(shù)據(jù)庫中的一致 if (!userpwd.equals(user.getupwd())) { // 如果密碼不正確 resultinfo.setcode(0); resultinfo.setmsg("用戶密碼不正確!"); return resultinfo; } resultinfo.setcode(1); resultinfo.setresult(user); return resultinfo; } }
7、編寫最后的servelt層
7.1 用戶登陸
package com.ftzlover.demo.web; import com.ftzlover.demo.po.user; import com.ftzlover.demo.service.userservice; import com.ftzlover.demo.vo.resultinfo; import javax.servlet.servletexception; import javax.servlet.annotation.webservlet; import javax.servlet.http.cookie; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import java.io.ioexception; @webservlet("/user") public class userservlet extends httpservlet { private userservice userservice = new userservice(); @override protected void service(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { // 接收用戶行為 string actionname = request.getparameter("actionname"); if ("login".equals(actionname)) { // 用戶登錄 userlogin(request, response); } } /** * 用戶登錄 1. 獲取參數(shù) (姓名、密碼) 2. 調(diào)用service層的方法,返回resultinfo對象 3. 判斷是否登錄成功 如果失敗 將resultinfo對象設置到request作用域中 請求轉(zhuǎn)發(fā)跳轉(zhuǎn)到登錄頁面 如果成功 將用戶信息設置到session作用域中 判斷用戶是否選擇記住密碼(rem的值是1) 如果是,將用戶姓名與密碼存到cookie中,設置失效時間,并響應給客戶端 如果否,清空原有的cookie對象 重定向跳轉(zhuǎn)到index頁面 * @param request * @param response */ private void userlogin(httpservletrequest request, httpservletresponse response) { // 1. 獲取參數(shù) (姓名、密碼) string username = request.getparameter("username"); string userpwd = request.getparameter("userpwd"); // 2. 調(diào)用service層的方法,返回resultinfo對象 resultinfo<user> resultinfo = userservice.userlogin(username, userpwd); // 3. 判斷是否登錄成功 if (resultinfo.getcode() == 1) { // 如果成功 // 將用戶信息設置到session作用域中 request.getsession().setattribute("user", resultinfo.getresult()); // 判斷用戶是否選擇記住密碼(rem的值是1) string rem = request.getparameter("rem"); // 如果是,將用戶姓名與密碼存到cookie中,設置失效時間,并響應給客戶端 if ("1".equals(rem)) { // 得到cookie對象 cookie cookie = new cookie("user",username +"-"+userpwd); // 設置失效時間 cookie.setmaxage(3*24*60*60); // 響應給客戶端 response.addcookie(cookie); } else { // 如果否,清空原有的cookie對象 cookie cookie = new cookie("user", null); // 刪除cookie,設置maxage為0 cookie.setmaxage(0); // 響應給客戶端 response.addcookie(cookie); } // 重定向跳轉(zhuǎn)到index頁面 try { response.sendredirect("index.html"); } catch (ioexception e) { e.printstacktrace(); } } else { // 失敗 // 將resultinfo對象設置到request作用域中 request.setattribute("resultinfo", resultinfo); // 請求轉(zhuǎn)發(fā)跳轉(zhuǎn)到登錄頁面 try { request.getrequestdispatcher("login.jsp").forward(request, response); } catch (servletexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } } } }
附件:util層的dbutil
package com.ftzlover.demo.util; import java.io.inputstream; import java.sql.*; import java.util.properties; public class dbutil { // 得到配置文件對象 private static properties properties = new properties(); static { try { // 加載配置文件(輸入流) inputstream in = dbutil.class.getclassloader().getresourceasstream("db.properties"); system.out.println("是否獲取到流對象:" + in); system.out.println("流對象:" + properties); // 通過load()方法將輸入流的內(nèi)容加載到配置文件對象中 properties.load(in); // 通過配置文件對象的getproperty()方法獲取驅(qū)動名,并加載驅(qū)動 class.forname(properties.getproperty("jdbcname")); } catch (exception e) { e.printstacktrace(); } } public static connection getconnetion() { connection connection = null; try { // 得到數(shù)據(jù)庫連接的相關信息 string dburl = properties.getproperty("dburl"); system.out.println(dburl); string dbname = properties.getproperty("dbname"); system.out.println(dbname); string dbpwd = properties.getproperty("dbpwd"); system.out.println(dbname); // 得到數(shù)據(jù)庫連接 connection = drivermanager.getconnection(dburl, dbname, dbpwd); system.out.println(connection); } catch (sqlexception throwables) { throwables.printstacktrace(); } return connection; } public static void close(resultset resultset, preparedstatement preparedstatement, connection connection) { try { // 判斷資源對象如果不為空,則關閉 if (resultset != null) { resultset.close(); } if (preparedstatement != null) { preparedstatement.close(); } if (connection != null) { connection.close(); } } catch (exception e) { e.printstacktrace(); } } }
8、示例
十分炫酷的登陸界面加完善的后臺登陸界面截圖:
數(shù)據(jù)庫代碼:新建數(shù)據(jù)庫名叫my 建表名叫tb_user
create table `tb_user` ( `userid` int(11) not null auto_increment comment '主鍵,自動增長', `uname` varchar(50) not null comment '用戶名', `upwd` varchar(50) default null comment '密碼', `nick` varchar(50) default null comment '昵稱', `head` varchar(100) default null comment '頭像', `mood` varchar(500) default null comment '心情', primary key (`userid`) ) engine=innodb auto_increment=5 default charset=utf8;
到此這篇關于關于jsp用戶登錄連接數(shù)據(jù)庫詳情的文章就介紹到這了,更多相關jsp用戶登錄連接數(shù)據(jù)庫內(nèi)容請搜索碩編程以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持碩編程!