文章詳情頁
關于JSP用戶登錄連接數據庫詳情
瀏覽:87日期:2022-06-07 18:45:19
目錄
- 關于JSP用戶登錄連接數據庫詳情
- 1、首先創建po類
- 2、創建底層UserDao
- 3、創建UserService(一般都會調用UserDao)
- 4、寫web層UserSrevlet
- 4.1重寫方法
- 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@Setterpublic 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@Setterpublic class ResultInfo<T> { private Integer code; // 狀態碼 成功=1,失敗=0 private String msg; // 提示信息 private T result; // 返回的對象(字符串、JavaBean、集合、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.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. 獲取參數 (姓名、密碼) 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",userName +"-"+userPwd);// 設置失效時間cookie.setMaxAge(3*24*60*60);// 響應給客戶端response.addCookie(cookie); } else {// 如果否,清空原有的cookie對象Cookie cookie = new Cookie("user", null);// 刪除cookie,設置maxage為0cookie.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用戶登錄連接數據庫內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
標簽:
JSP
排行榜
