狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现
2022/3/28 9:53:01
本文主要是介绍狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
页面实现逻辑/流程
1、编写前端页面
前端页面直接使用已有的,我们主要编写网页背后的执行代码
2、设置首页
<!--设置欢迎页/首页--> <welcome-file-list> <welcome-file>login.jsp</welcome-file> </welcome-file-list>
3、编写Dao层用户登陆的接口
-
创建一个UserDao接口,然后我们按照"面向接口编程"的原则去接口UserDaoImpl中实现这个接口中的方法
-
使用面向接口编程的好处就在与我们在接口中只需要定义方法,而不需要实现方法,整个结构和思路都很清晰
-
其次就是将设计和实现分离,保证了设计专注于设计,实现专注于实现
-
package com.thhh.dao.user; import com.thhh.pojo.User; import java.sql.Connection; public interface UserDao { /** * 得到要进行登陆的用户 * @param conn:数据库连接对象 * @param userCode:通过用户的用户名userCode查询用户数据 * @return */ public User getLoginUserInfo(Connection conn,String userCode); }
4、编写Dao接口的实现类
package com.thhh.dao.user; import com.thhh.dao.BaseDao; import com.thhh.pojo.User; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class UserDaoImpl implements UserDao{ @Override public User getLoginUserInfo(Connection conn, String userCode) { PreparedStatement pstmt = null; ResultSet rs = null; User user = null; if (conn!=null){ String sql = "SELECT * FROM smbms_user WHERE userCode = ?"; Object[] params = {userCode}; rs = BaseDao.executeQuery(sql,params,conn,pstmt,rs);//调用项目搭建阶段准备的公共查询方法 try { while (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"));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.close(null,pstmt,rs);//因为数据库的连接可能不只是这一个操作,所以我们不应该做完一件事就把数据库连接对象销毁,所以conn处传的null } catch (SQLException throwables) { throwables.printStackTrace(); } } return user; } }
5、编写业务层接口
package com.thhh.service.user; import com.thhh.pojo.User; public interface UserService { /** * 用户登陆身份验证 * @param userCode:用户账号 * @param userPassword:用户密码,注意,密码判断我们在service层进行; * 在Dao层只是简单的操作数据库,没有其他的逻辑代码;在servlet层中只是接收和转发请求以及控制视图跳转 * 而对于业务层(service)就是用来实现业务逻辑代码的 * @return */ public User login(String userCode,String userPassword); }
6、业务层实现类
package com.thhh.service.user; /** * 业务层主要就是编写业务代码,在编写业务代码的时候经常会调用数据库 * 所以在业务层中需要使用到我们一开始编写好的DAO的代码 */ import com.thhh.dao.BaseDao; import com.thhh.dao.user.UserDao; import com.thhh.pojo.User; import org.junit.Test; import java.sql.Connection; public class UserServiceImpl implements UserService{ private UserDao userDao;//业务层需要使用Dao,所以直接将Dao作为一个成员变量来使用 public UserServiceImpl(UserDao userDao) { this.userDao = userDao;//在业务层被实例化的时候就让它得到Dao对象,后面就可以直接去用 } @Override public User login(String userCode, String userPassword) { Connection conn = null; User user = null; conn = BaseDao.getConnection();//获取数据库连接对象 //通过业务层调用Dao层 user = userDao.getLoginUserInfo(conn,userCode);//调用userDao中的获取用户信息的方法 BaseDao.close(conn,null,null); return user; } }
测试是否能够成功运行
@Test public void test(){ UserServiceImpl userService = new UserServiceImpl(); User admin = userService.login("admin","12bfasbka"); System.out.println(admin.getUserPassword()); }
7、编写servlet
首先导入我们也用到的JSP页面
其中frame.jsp是登陆成功之后跳转的页面,而common中是页面的头部和底部
注意:我们在编写servlet和注册servlet的时候一定要注意我们使用的前端页面上面写的地址,为了不出错最后时与前端页面上写的地址保持一致;其次就是注意前端使用的JSP内置对象和EL表达式,我们在后端需要使用对应的变量名,否则是取不到值的
servlet编写
package com.thhh.servlet.user; import com.thhh.pojo.User; import com.thhh.service.user.UserService; import com.thhh.service.user.UserServiceImpl; import com.thhh.utils.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{ private UserService userService = null; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1、获取前端传过来的用户名+密码 String userCode = req.getParameter("userCode"); String userPassword = req.getParameter("userPassword"); //2、调用业务层,将数据库中查出来的密码和用户的输入进行对比 this.userService = new UserServiceImpl(); User user = userService.login(userCode,userPassword);//已经把用户查到了 //3、判断返回是否为null 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); } /* if () user.getUserPassword()*/ } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
8、注册servlet
<!--注册登陆的servlet--> <servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>com.thhh.servlet.user.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping>
注意:这里的映射与我们使用的前端页面表单提交的action要保持一致
9、测试功能,确保上面的代码正确
测试完成!
这篇关于狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南
- 2024-09-30Dnd-Kit学习:新手快速入门指南