【项目实践】SMBMS(Javaweb版)(二)登录功能
文章目录
- 登录功能
- 登录页面
- 持久层dao层的用户登录及接口实现
- dao层接口
- 实现所需的方法
- 业务层sevice层的接口的实现
- 接口
- 实现相关的业务逻辑
- 编写servlet的业务逻辑
- 编写业务逻辑
- 映射接口路径
登录功能
登录页面主要有两点功能:
- 已有用户登录
- 未有用户注册
登录页面
持久层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>