java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现...

页面实现逻辑/流程

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第1张图片

1、编写前端页面

​前端页面直接使用已有的,我们主要编写网页背后的执行代码

2、设置首页

login.jsp

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第2张图片

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());

}

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第3张图片

7、编写servlet

首先导入我们也用到的JSP页面

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第4张图片

​其中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

LoginServlet

com.thhh.servlet.user.LoginServlet

LoginServlet

/login.do

注意:这里的映射与我们使用的前端页面表单提交的action要保持一致

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第5张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第6张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第7张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第8张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第9张图片

9、测试功能,确保上面的代码正确

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第10张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第11张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第12张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第13张图片

java 超市订单类_狂神说Java【SMBMS】——SMBMS超市订单管理系统(二) ——登陆功能实现..._第14张图片

测试完成!

你可能感兴趣的:(java,超市订单类)