超市訂單管理系統(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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM