狂神说 javaweb 31集:smbms登录流程实现_SMBMS 项目搭建(二)

31 . smbms登录流程实现

开发

MVC架构

  • Module:业务模型

  • View:用户界面

  • Controller:控制器

页面发送请求给Controller(控制器),Controller调用Service(业务层) 处理逻辑,Service(Impl实现类)向DAO(持久层)发送请求,DAO与数据库交互后,将结果返回给Service,Service再将处理逻辑发送给Controller,最后Controller再调用视图展现数据到页面上。

【狂神说】SMBMS 超市账单管理系统_JavaWeb_19

项目架构

【狂神说】SMBMS 超市账单管理系统_SMBMS_20

开发方式

自顶向下分析,自底向上实现

登录功能实现

在这里插入图片描述

  1. 编写前端页面

  2. 设置首页 1.设置欢迎首页

     <!--设置欢迎页面-->
     <welcome-file-list>
         <welcome-file>login.jsp</welcome-file>
     </welcome-file-list>
  3. 编写dao层登录用户登录的接口

    UserDao.java

     package com.study.dao.user;
     
     import com.study.pojo.User;
     import java.sql.Connection;
     
     public interface UserDao {
     
         /**
          * 通过userCode获取User
          *
          * @param connection
          * @param userCode
          * @return
          * @throws Exception
          */
         public User getLoginUser(Connection connection, String userCode) throws Exception;
     }
     
  4. 编写dao层接口的实现类

    UserDaoImpl.java

     package com.study.dao.user;
     
     import com.study.dao.BaseDao;
     import com.study.pojo.User;
     
     import java.sql.Connection;
     import java.sql.PreparedStatement;
     import java.sql.ResultSet;
     import java.sql.SQLException;
     
     public class UserDaoImpl implements UserDao{
         public User getLoginUser(Connection connection, String userCode) {
             PreparedStatement pstm = null;
             ResultSet rs = null;
             User user = null;
             try {
                 if (null != connection) {
                     String sql = "select * from smbms_user where userCode=?";
                     Object[] params = {userCode};
                     rs = BaseDao.execute(connection, pstm, rs, sql, params);
     
                     if (rs.next()) {
                         user = new User();
                         user.setId(rs.getInt("id"));
                         user.setUserCode(rs.getString("userCode"));
                         user.setUserName(rs.getString("userName"));
                         user.setUserPassword(rs.getString("userPassword"));
                         user.setGender(rs.getInt("gender"));
                         user.setBirthday(rs.getDate("birthday"));
                         user.setPhone(rs.getString("phone"));
                         user.setAddress(rs.getString("address"));
                         user.setUserRole(rs.getInt("userRole"));
                         user.setCreatedBy(rs.getInt("createdBy"));
                         user.setCreationDate(rs.getTimestamp("creationDate"));
                         user.setModifyBy(rs.getInt("modifyBy"));
                         user.setModifyDate(rs.getTimestamp("modifyDate"));
                    }
                }
                 BaseDao.closeResource(null, pstm, rs);
            } catch (SQLException throwables) {
                 throwables.printStackTrace();
            }
             return user;
        }
     }
  5. 业务层接口

    UserService.java

     package com.study.service.user;
     
     import com.study.pojo.User;
     
     public interface UserService {
         //用户登录
         public User login(String userCode, String userPassword);
     }
  6. 业务层实现类

    UserServiceImpl.java

     package com.study.service.user;
     
     import com.study.dao.BaseDao;
     import com.study.dao.user.UserDao;
     import com.study.dao.user.UserDaoImpl;
     import com.study.pojo.User;
     import org.junit.Test;
     
     
     import java.sql.Connection;
     import java.sql.SQLException;
     
     public class UserServiceImpl implements UserService{
     
         //业务层都会调用dao层,所有我们必须引入Dao层
         private UserDao userDao;
     
         public UserServiceImpl() {
             userDao = new UserDaoImpl();
        }
     
         public User login(String userCode, String userPassword) {
             Connection connection = null;
             User user = null;
             try {
                 connection = BaseDao.getConnection();
                 //通过业务层调用对应的具体数据库操作
                 user = userDao.getLoginUser(connection, userCode);
            } catch (Exception e) {
                 e.printStackTrace();
            } finally {
                 BaseDao.closeResource(connection, null, null);
            }
     
             //匹配密码
             if (null != user) {
                 if (!user.getUserPassword().equals(userPassword)) {
                     user = null;
                }
            }
             return user;
        }
     
         @Test
         public void test(){
             UserServiceImpl userService = new UserServiceImpl();
             User admin = userService.login( "admin", "1234567" );
             System.out.println(admin.getUserPassword());
        }
     }
  7. 编写Servlet:业务层实现类

    LoginServlet.java

     package com.study.servlet.user;
     
     import com.study.pojo.User;
     import com.study.service.user.UserService;
     import com.study.service.user.UserServiceImpl;
     import com.study.util.Constants;
     
     import javax.servlet.ServletException;
     import javax.servlet.http.HttpServlet;
     import javax.servlet.http.HttpServletRequest;
     import javax.servlet.http.HttpServletResponse;
     import java.io.IOException;
     
     public class LoginServlet extends HttpServlet {
     
         //Service:控制层 ,调用业务层
         @Override
         protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             req.setCharacterEncoding( "utf-8" );
             resp.setCharacterEncoding( "utf-8" );
             System.out.println("进入LoginServlet");
     
             //获取用户名和密码
             String userCode = req.getParameter( "userCode" );
             String userPassword = req.getParameter( "userPassword" );
     
             //和数据库中的密码进行对比,调用业务层
             UserService userService = new UserServiceImpl();
             User user = userService.login( userCode, userPassword );//这里已经把登录的人给查出来了
     
             if (user != null){//查有此人可以登录
                 //将用户的信息放到session
                 req.getSession().setAttribute( Constants.USER_SESSION,user );
                 //跳转到主页
                 resp.sendRedirect( "jsp/frame.jsp" );
            }else{//查无此人,无法登陆
                 //转发回答到登录页面,顺带提示他,用户名或者,密码错误;
                 req.setAttribute( "error","用户名或者密码不正常" );
                 req.getRequestDispatcher( "login.jsp" ).forward( req,resp );
            }
     
        }
     
         @Override
         protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
             doGet( req, resp );
        }
     }
  8. 注册Servlet

    xml

     <servlet>
         <servlet-name>LoginServlet</servlet-name>
         <servlet-class>com.study.servlet.user.LoginServlet</servlet-class>
     </servlet>
     <servlet-mapping>
         <servlet-name>LoginServlet</servlet-name>
         <url-pattern>/login.do</url-pattern>
     </servlet-mapping>
  9. 测试访问,确保以上功能成功!

posted @   坚持做  阅读(174)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示