關於JSP使用者登入連線資料庫詳情
阿新 • • 發佈:2021-09-07
目錄
- 關於P使用者登入連線詳情
- 1、首先建立po類
- 2、建立底層UserDao
- 3、建立UserService(一般都會呼叫UserDao)
- 4、寫web層UserSrevlet
- 4.1 重寫www.cppcns.com方法
- 4.2建立vo層並在裡面建立ResultInfo類用於封裝返回資料
- 5、開始從Dao開始寫
- 6、開始寫service層
- 7、編寫最後的Servelt層
- 7.1 使用者登陸
- 8、示例
關於JSP使用者登入連線資料庫詳情
1、首先建立po類
與資料庫一一對應
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、建立底層UserDao
這裡就是所有建立好的層
3、建立UserService(一般都會呼叫UserDao)
private UserDao userDao = new UserDao();
4、寫web層UserSrevlet
注意:
- 首先需要寫@WebServlet("/user")在頂端,
- 接下來讓其呼叫service層private UserService userService = new UserService();
- 然後讓後讓這個類繼承 HttpServlet
public class UserServlet extends HttpServlet {
4.1 重寫方法
@Override protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
4.2建立vo層並在裡面建立ResultInfo類用於封裝返回資料
建立狀態碼code 提示資訊 返回物件
@Getter @Setter public class ResultInfo<T> { private Integer code; // 狀態碼 成功=1,失敗=0 private String msg; // 提示資訊 private T result; // 返回的物件(字串、Bean、集合、Map等) }
5、開始從Dao開始寫
Dao層:(資料訪問層:資料庫中的增刪改查操作)通過使用者名稱查詢使用者物件, 返回使用者物件
獲取資料庫連線
- 定義sql語句
- 預編譯
- 設定引數
- 執行查詢,返回結果集
- 判斷並分析結果集
- 關閉資源
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層:(資料訪問層:資料庫中的增刪改查操作) * 通過使用者名稱查詢使用者物件, 返回使用者物件 * 1. 獲取資料庫連線 * 2. 定義sql語句 * 3. 預編譯 * 4. 設定引數 * 5. 執行查詢,返回結果集 * 6. 判斷並分析結果集 * 7. 關閉資源 */ public class UserDao { public User queryUserByName(String userName){ //首先建立物件 User user = null; Connection connection = null; PreparedStatement preparedStatement = null; //預編譯物件 ResultSet resultSet = null; try { // 1. 獲取資料庫連線 connection = DBUtil.getConnetion(); // 2. 定義sql語句 String sql = "select * from tb_user where uname = ?"; // 3. 預編譯 preparedStatement = connection.prepareStatement(sql); // 4. 設定引數 preparedStatement.setString(1,userName); // 5. 執行查詢,返回結果集 resultSet = preparedStatement.executeQuery(); // 6. 判斷並分析結果集 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層:(業務邏輯層:引數判斷、業務邏輯處理) 1. 判斷引數是否為空 如果為空 設定ResultInfo物件的狀態碼和提示資訊 返回resultInfo物件 2. 如果不為空,通過使用者名稱查詢使用者物件 3. 判斷使用者物件是否為空 如果為空 設定ResultInfo物件的狀態碼和提示資訊 返回resultInfo物件 4. 如果使用者物件不為空,將資料庫中查詢到的使用者物件的密碼與前臺傳遞的密碼作比較 (將密碼加密後再比較) 如果密碼不正確 設定ResultInfo物件的狀態碼和提示資訊 返回resultInfo物件 5. 如果密碼正確 設定ResultInfo物件的狀態碼和提示資訊 6. 返回resultInfo物件 */ public class UserService { private UserDao userDao = new UserDao(); public ResultInfo<User> userLogin(String userName,String userPwd){ ResultInfo<User> resultInfo = new ResultInfo<>(); // 資料回顯:當登入實現時,將登入資訊返回給頁面顯示 User u = new User(); u.setUname(userName); u.setUpwd(userPwd); // 設定到resultInfo物件中 resultInfo.setResult(u); // 1. 判斷引數是否為空 if (StrUtil.isBlank(userName) || StrUtil.isBlank(userPwd)) { // 如果為空 設定ResultInfo物件的狀態碼和提示資訊 resultInfo.setCode(0); resultInfo.setMsg("使用者姓名或密碼不能為空!"); // 返回resultInfo物件 return resultInfo; } // 2. 如果不為空,通過使用者名稱查詢使用者物件 User user = userDao.queryUserByName(userName); // 3. 判斷使用者物件是否為空 if (user == null) { // 如果為空,設定ResultInfo物件的狀態碼和提示資訊 resultInfo.setCode(0); resultInfo.setMsg("該使用者不存在!"); // 返回resultInfo物件 return resultInfo; } // 4. 如果使用者物件不為空,將資料庫中查詢到的使用者物件的密碼與前臺傳遞的密碼作比較 (將密碼加密後再比較) // 將前臺傳遞的密碼按照MD5演算法的方式加密 userPwd = DigestUtil.md5Hex(userPwd); // 判斷加密後的密碼是否與資料庫中的一致 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.Userhttp://www.cppcns.com; 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,IOException { // 接收使用者行為 String actionName = request.getParameter("actionName"); if ("login".equals(actionName)) { // 使用者登入 userLogin(request,response); } } /** * 使用者登入 1. 獲取引數 (姓名、密碼) 2. 呼叫Service層的方法,返回ResultInfo物件 3. 判斷是否登入成功 如果失敗 將resultInfo物件設定到request作用域中 請求轉發跳轉到登入頁面 如果成功 將使用者資訊設定到session作用域中 判斷使用者是否選擇記住密碼(rem的值是1) 如果是,將使用者姓名與密碼存到cookie中,設定失效時間,並響應給客戶端 如果否,清空原有的cookie物件 重定向跳轉到index頁面 * @param request * @param response */ private void userLogin(HttpServletRequest request,HttpServletResponse response) { // 1. 獲取引數 (姓名、密碼) String userName = request.getParameter("userName"); String userPwd = request.getParameter("userPwd"); // 2. 呼叫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",userhttp://www.cppcns.comName +"-"+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); } // 重定向跳轉到index頁面 try { response.sendRedirect("index.html"); } catch (IOException e) { e.printStackTrace(); } } else { // 失敗 // 將resultInfo物件設定到request作用域中 request.setAttribute("resultInfo",resultInfo); // 請求轉發跳轉到登入頁面 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()方法將輸入流的內容載入到配置檔案物件中 properties.load(in); // 通過配置檔案物件的getProperty()方法獲取驅動名,並載入驅動 Class.forName(properties.getProperty("jdbcName")); } catch (Exception e) { e.printStackTrace(); } } public static Connection getConnetion() { Connection connection = null; try { // 得到資料庫連線的相關資訊 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); // 得到資料庫連線 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、示例
十分炫酷的登陸介面加完善的後臺登陸介面截圖:
資料庫程式碼:新建資料庫名叫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使用者登入連線資料庫詳情的文章就介紹到這了,更多相關JSP使用者登入連線資料庫內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!