一个简单的超市订单管理系统(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>