1. 程式人生 > 其它 >一個簡單的超市訂單管理系統(3)-登入功能的實現

一個簡單的超市訂單管理系統(3)-登入功能的實現

1.登入功能實現的大致流程

  (1)編寫前端頁面,也可以用這個連結:https://pan.baidu.com/s/120ErVJdad9w7bemd78WzWQ提取碼:9999這個頁面和上文準備階段的靜態資源是匹配的。將登陸頁面放在webapp目錄下,與建立專案的時候生成的index.jsp同級

  (2)在web.xml中配置登陸頁面,讓程式啟動後不去訪問index.jsp,而是去訪問我們的登入頁面

1     <welcome-file-list>
2         <welcome-file>/login.jsp</welcome-file>
3     </
welcome-file-list>

  (3)編寫持久化層,也就是Dao介面和實現類,去操作我們的資料庫,通過實現類去實現UserDao介面,去資料庫中查詢使用者資訊

1 package com.xiaoma.dao.user;
2 
3 import com.xiaoma.pojo.User;
4 import java.sql.Connection;
5 
6 public interface UserDao {
7     //得到要登入的使用者
8     public User getLoginUser(Connection connection,String userCode);
9 }
 1 package com.xiaoma.dao.user;
 2 
 3 import com.xiaoma.dao.BaseDao;
 4 import com.xiaoma.pojo.User;
 5 
 6 import java.sql.Connection;
 7 import java.sql.PreparedStatement;
 8 import java.sql.ResultSet;
 9 
10 public class UserDaoImpl implements UserDao{
11     @Override
12     public User getLoginUser(Connection connection, String userCode){
13 //1.首先想一下,我們肯定要用BaseDao裡的寫好的公共查詢方法去查詢,去執行我們的sql,從BaseDao中的公共查詢方法中可以看到 14 //我們需要建立connection,resultSet,preparedStatement,sql和params五個引數物件,其中connection已經有了 15 PreparedStatement pstm=null; 16 ResultSet rs=null; 17 User user=null; 18 19 //當我們資料庫連結了才會去執行下面的程式碼,資料庫連結了丟一個sql進去並執行 20 if (connection != null) { 21 String sql="select * from smbms_user where userCode=?";//為了安全,使用預編譯的sql 22 Object[] params={userCode}; 23 24 //2.去呼叫BaseDao裡的寫好的公共查詢方法去執行sql 25 try { 26 rs = BaseDao.execute(connection, pstm, rs, sql, params); 27 28 //3.我們這一步是要去遍歷我們查詢的結果集 29 if (rs.next()) { 30 //因為查出來資料之後是一個使用者,所以將它封裝到使用者裡邊 31 user=new User(); 32 user.setID(rs.getInt("id")); 33 user.setUserCode(rs.getString("userCode")); 34 user.setUsername(rs.getString("userName")); 35 user.setUserPassword(rs.getString("userPassword")); 36 user.setGender(rs.getInt("gender")); 37 user.setBirthday(rs.getDate("gender")); 38 user.setPhone(rs.getString("gender")); 39 user.setAddress(rs.getString("gender")); 40 user.setUserRole(rs.getInt("userRole")); 41 user.setCreatedBy(rs.getInt("createdBy")); 42 user.setCreationDate(rs.getTimestamp("creationDate")); 43 user.setModifyBy(rs.getInt("modifyBy")); 44 user.setModifyDate(rs.getTimestamp("modifyDate")); 45 } 46 47 //4.查詢完之後要關閉,其中connection連線不用關 48 BaseDao.closeResourses(null,pstm,rs); 49 }catch (Exception e){ 50 e.printStackTrace(); 51 } 52 } 53 54 //5.程式碼走完了將我們查詢到的user返回給要呼叫它的物件 55 return user; 56 } 57 }

  (4)編寫業務層(service層)介面和實現類,去操作dao

1 package com.xiaoma.service.user;
2 
3 import com.xiaoma.pojo.User;
4 
5 public interface UserService {
6     //使用者登入業務
7     public User Login(String userCode,String password);
8 }
 1 package com.xiaoma.service.user;
 2 
 3 import com.xiaoma.dao.BaseDao;
 4 import com.xiaoma.dao.user.UserDao;
 5 import com.xiaoma.dao.user.UserDaoImpl;
 6 import com.xiaoma.pojo.User;
 7 import org.junit.jupiter.api.Test;
 8 
 9 import java.sql.Connection;
10 
11 public class UserServiceImpl implements UserService{
12     //1.因為業務層要呼叫dao層,所以要先把dao層引入進來,並且例項化
13     private UserDao userDao;
14     public UserServiceImpl(){
15         userDao=new UserDaoImpl();
16     }
17 
18     @Override
19     public User Login(String userCode, String password) {
20         Connection connection=null;
21         User user=null;
22 
23         try{
24             //2.連線資料庫
25             connection=BaseDao.getConnection();
26             //3.呼叫Dao層,進行具體的資料庫操作
27             user=userDao.getLoginUser(connection,userCode);
28         }catch (Exception e){
29             e.printStackTrace();
30         }finally {
31             BaseDao.closeResourses(connection,null,null);
32         }
33 
34         //4.將使用者返回出去,這樣只要呼叫UserServiceImpl類中的Login方法就可以拿到使用者
35         return user;
36     }
37 }

  (5)編寫一個用來存放常量的類

1 package com.xiaoma.util;
2 
3 public class Constants {
4     public final static String USER_SESSION="userSession";
5 }

  (6)匯入內部首頁的jsp檔案和公共的頭部和尾部的jsp,我特喵的百度網盤打不開了,先不搞了,想玩這個專案的朋友聯絡Q810806242,或者評論區發自己的郵箱或者其他聯絡方式

  (7)編寫servlet

 1 package com.xiaoma.servlet.user;
 2 
 3 import com.xiaoma.pojo.User;
 4 import com.xiaoma.service.user.UserService;
 5 import com.xiaoma.service.user.UserServiceImpl;
 6 import com.xiaoma.util.Constants;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.http.HttpServlet;
 9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import java.io.IOException;
12 
13 public class UserServlet extends HttpServlet {
14     @Override
15     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
16         //這個也就是Controller層,該層呼叫業務層(service層)
17         //1.通過getParameter()方法獲取前端的使用者名稱和密碼,方法內傳遞的是前端的name屬性
18         String userCode=req.getParameter("userCode");
19         String password=req.getParameter("userPassword");
20 
21         //呼叫業務層,與資料庫中的使用者名稱和密碼進行比對
22         UserService userService=new UserServiceImpl();
23         User user=userService.Login(userCode,password);
24         //如果查到的使用者存在,就讓其登入並轉發到內部的首頁,否則登入失敗,重定向到登入頁,並提示使用者名稱或密碼錯誤
25         if (user != null) {
26             req.getSession().setAttribute(Constants.USER_SESSION,user);
27             resp.sendRedirect("jsp/frame.jsp");
28         }else{
29             req.setAttribute("error","使用者名稱或者密碼錯誤");
30             req.getRequestDispatcher("login.jsp").forward(req,resp);
31         }
32     }
33 
34     @Override
35     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
36         doGet(req, resp);
37     }
38 }

  (8)在web.xml中註冊這個servlet,啟動tomcat,執行程式

1     <!--註冊servlet-->
2     <servlet>
3         <servlet-name>UserServlet</servlet-name>
4         <servlet-class>com.xiaoma.servlet.user.UserServlet</servlet-class>
5     </servlet>
6     <servlet-mapping>
7         <servlet-name>UserServlet</servlet-name>
8         <url-pattern>/login.do</url-pattern>
9     </servlet-mapping>