当前位置: 首页 > news >正文

【项目实践】SMBMS(Javaweb版)(二)登录功能

文章目录

  • 登录功能
    • 登录页面
    • 持久层dao层的用户登录及接口实现
      • dao层接口
      • 实现所需的方法
    • 业务层sevice层的接口的实现
      • 接口
      • 实现相关的业务逻辑
    • 编写servlet的业务逻辑
      • 编写业务逻辑
      • 映射接口路径

登录功能

登录页面主要有两点功能:

  1. 已有用户登录
  2. 未有用户注册

登录页面

No
Yes
用户
登录输入账号密码
输入正确/错误
账号/密码错误
返回主页面

持久层dao层的用户登录及接口实现

与数据库交互

dao层接口

package com.dashangms.dao.user;import com.dashangms.pojo.User;import java.sql.Connection;public interface UserDao {/*** 用户登录查询** @param connection   数据库连接对象* @param userCode     用户编码* @param userPassword 用户密码* @return 登录用户对象* @throws Exception 异常处理*/User getLoginUser(Connection connection, String userCode, String userPassword) throws Exception;/*** 更新用户密码** @param connection   数据库连接对象* @param id     用户id* @param newPwd 新密码* @return 影响行数* @throws Exception 异常处理*/int updatePwd(Connection connection, Integer id, String newPwd) throws Exception;/*** 获取用户数量(根据用户名和角色筛选)** @param connection    数据库连接对象* @param queryUserName 查询的用户名* @param queryUserRole 查询的角色* @return 用户数量* @throws Exception 异常处理*/int getUserCount(Connection connection, String queryUserName, Integer queryUserRole) throws Exception;/*** 根据用户id获取用户信息** @param connection 数据库连接对象* @param id 用户id* @return 用户对象* @throws Exception 异常处理*/User getUserById(Connection connection, String id) throws Exception;/*** 修改用户信息** @param connection 数据库连接对象* @param user 用户对象* @return 影响行数* @throws Exception 异常处理*/int modify(Connection connection, User user) throws Exception;/*** 根据用户id删除用户** @param connection 数据库连接对象* @param delId 删除的用户id* @return 影响行数* @throws Exception 异常处理*/int deleteUserById(Connection connection, Integer delId) throws Exception;/*** 添加用户** @param connection 数据库连接对象* @param user 用户对象* @return 影响行数* @throws Exception 异常处理*/int add(Connection connection, User user) throws Exception;/*** 检查用户编码是否存在** @param connection 数据库连接对象* @param userCode 用户编码* @return 用户对象* @throws Exception 异常处理*/User selectUserCodeExist(Connection connection, String userCode) throws Exception;
}

实现所需的方法

package com.dashangms.dao.user;import com.dashangms.dao.BaseDao;
import com.dashangms.pojo.User;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;public class UserDaoImpl implements UserDao{/*** 用户登录查询** @param connection 数据库连接对象* @param userCode     用户编码* @param userPassword 用户密码* @return 登录用户对象* @throws Exception 异常处理*/
@Override
public User getLoginUser(Connection connection, String userCode, String userPassword) throws Exception {User user = null;// 检查数据库连接是否已建立if (connection != null){PreparedStatement preparedStatement = null;ResultSet  resultSet = null;// SQL查询语句,用于验证用户登录String sql = "select * from smbms_user where userCode = ? and userPassword = ?";// 预编译SQL语句,提高性能和安全性preparedStatement = connection.prepareStatement(sql);// 设置查询参数preparedStatement.setString(1, userCode);preparedStatement.setString(2, userPassword);// 执行查询resultSet = preparedStatement.executeQuery();// Object[] params = {userCode, userPassword} ;// resultSet = BaseDao.executeQuery(connection, sql, preparedStatement,params, resultSet);// 处理查询结果if (resultSet != null){user = getUserByResult(resultSet);}// 关闭资源,避免内存泄漏BaseDao.closeResource(connection, preparedStatement, resultSet);}return user;
}private User getUserByResult(ResultSet rs) throws Exception {User 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.setCreateDate(rs.getTimestamp("createDate"));user.setModifyBy(rs.getInt("modifyBy"));user.setModifyDate(rs.getTimestamp("modifyDate"));return user;}/*** 更新用户密码** @param connection 数据库连接对象* @param id         用户id* @param newPwd     新密码* @return 影响行数* @throws Exception 异常处理*/@Overridepublic int updatePwd(Connection connection, Integer id, String newPwd) throws Exception {return 0;}/*** 获取用户数量(根据用户名和角色筛选)** @param connection    数据库连接对象* @param queryUserName 查询的用户名* @param queryUserRole 查询的角色* @return 用户数量* @throws Exception 异常处理*/@Overridepublic int getUserCount(Connection connection, String queryUserName, Integer queryUserRole) throws Exception {return 0;}/*** 根据用户id获取用户信息** @param connection 数据库连接对象* @param id         用户id* @return 用户对象* @throws Exception 异常处理*/@Overridepublic User getUserById(Connection connection, String id) throws Exception {return null;}/*** 修改用户信息** @param connection 数据库连接对象* @param user       用户对象* @return 影响行数* @throws Exception 异常处理*/@Overridepublic int modify(Connection connection, User user) throws Exception {return 0;}/*** 根据用户id删除用户** @param connection 数据库连接对象* @param delId      删除的用户id* @return 影响行数* @throws Exception 异常处理*/@Overridepublic int deleteUserById(Connection connection, Integer delId) throws Exception {return 0;}/*** 添加用户** @param connection 数据库连接对象* @param user       用户对象* @return 影响行数* @throws Exception 异常处理*/@Overridepublic int add(Connection connection, User user) throws Exception {return 0;}/*** 检查用户编码是否存在** @param connection 数据库连接对象* @param userCode   用户编码* @return 用户对象* @throws Exception 异常处理*/@Overridepublic User selectUserCodeExist(Connection connection, String userCode) throws Exception {return null;}
}

业务层sevice层的接口的实现

接口

package com.dashangms.service.user;import com.dashangms.pojo.User;
public interface UserService {/*** @param userCode 用户名* @param userPassword 密码* @return 用户对象*/public User login(String userCode, String userPassword);
}

实现相关的业务逻辑

package com.dashangms.service.user;import com.dashangms.dao.BaseDao;
import com.dashangms.dao.user.UserDao;
import com.dashangms.dao.user.UserDaoImpl;
import com.dashangms.pojo.User;import java.sql.Connection;
import java.sql.SQLException;public class UserServiceImpl implements UserService{private final UserDao userDao ;public UserServiceImpl(){userDao = new UserDaoImpl();}/*** @param userCode 用户名* @param userPassword 密码* @return 用户对象*/@Overridepublic User login(String userCode, String userPassword) {Connection conn = null;User user = null;try {conn = BaseDao.connection();user = userDao.getLoginUser(conn, userCode, userPassword);} catch (Exception e) {e.printStackTrace();}finally {BaseDao.closeConnection(conn);}return user;}}

编写servlet的业务逻辑

编写业务逻辑

package com.dashangms.servlet;import com.dashangms.pojo.User;
import com.dashangms.service.user.UserService;
import com.dashangms.service.user.UserServiceImpl;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 {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String userCode = req.getParameter("userCode");String userPassword = req.getParameter("userPassword");UserService userService = new UserServiceImpl();User user = userService.login(userCode, userPassword);if (user != null) {req.getSession().setAttribute("user", user);resp.sendRedirect(req.getContextPath() + "/jsp/frame.jsp");} else {req.setAttribute("error", " 账号或密码错误!");req.getRequestDispatcher("/login.jsp").forward(req, resp);}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doGet(req, resp);}
}

映射接口路径

    <!--注册Login servlet--><servlet><servlet-name>login</servlet-name><servlet-class>com.dashangms.servlet.LoginServlet</servlet-class></servlet><!--Login servlet请求路径--><servlet-mapping><servlet-name>login</servlet-name><url-pattern>/login</url-pattern></servlet-mapping>
http://www.xdnf.cn/news/876439.html

相关文章:

  • 《动手深度学习》8.2文本预处理—代码分析
  • Kafka消息队列笔记
  • 打包成windows exe
  • json 支持复杂结构预览、大模型服务部署体验优化|ModelWhale 版本更新
  • Ansible自动化运维全解析:从设计哲学到实战演进
  • 手写Promise中的实例方法catch
  • 如何做出更明智的选择:从吃馒头看经济学思维
  • 嵌入式学习Day32
  • 三维坐标转换
  • AXPM11584:颠覆传统,发现新可能
  • 灰狼优化算法MATLAB实现,包含种群初始化和29种基准函数测试
  • Mask篇 (含引导层、不规则遮罩)
  • 深入解析Java17核心新特性(密封类、模式匹配增强、文本块)
  • Python 类型注释 - typing
  • 关于Dify聊天对话名称无法自动生成的原因和解决方法
  • ReviewHub:实现Booster与设计工具端无缝链接的评审协作平台
  • Seata 分布式事务安装配置集成实战
  • Git忽略规则.gitignore不生效解决
  • 突破模型成本瓶颈:MoE如何让专业大模型更易用?​
  • echarts使用graph、lines实现拓扑,可以拖动增加effect效果
  • 力扣HOT100之二分查找:35. 搜索插入位置
  • PH热榜 | 2025-06-04
  • Facebook接入说明
  • JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?
  • 群论在现代密码学中的应用探索与实践 —— 从理论到C语言实现
  • 列出浏览器所有的启动参数,并解释说明每个参数的含义
  • 行为型-模板模式
  • 【高校论文】DFORMER重新思考用于语义分割的RGBD表示学习[南开国防科大]
  • 电路图识图基础知识-直接启动/接触器启动(十四)
  • 分布式训练下的多进程环境