登录页面
符合 3层架构 (体现责任分离 , 低耦合高内聚)
思路 :
浏览器-->login.jsp-->servlet-->service-->UserServiceImpl-->IUserDAO-->UserDAOImpl-->数据库
浏览器 <--login.jsp<--servlet<--service<--UserServiceImpl<--IUserDAO<--UserDAOImpl<--数据库
image-20200519112142984.png
这是IUserDAO
public interface IUserDAO {
User selectUser(String username);
}
这是UserDAOImpl
public class UserDAOImpl implements IUserDAO {
@Override
public User selectUser(String username) {
SqlSession sqlsession = MyBatisUtils.getSqlsession();
User u = sqlsession.selectOne("cn.wolfcode.mapper.UserMapper.secletUser", username);
sqlsession.close();
return u;
}
}
这是IUserService
public interface IUserService {
User login(String username,String password);
}
这是UserServiceImpl
public class UserServiceImpl implements IUserService {
private IUserDAO dao=new UserDAOImpl();
@Override
public User login(String username,String password) {
User user = dao.selectUser(username);
if(user==null){
//说明用户名不存在
throw new RuntimeException("亲,账号不存在!");
}
if(!user.getPassword().equals(password)){
throw new RuntimeException(("亲,密码错误!"));
}
return user;
}
}
这是LoginServlet
@WebServlet("/user")
public class LoginServlet extends HttpServlet {
IUserService dao = new UserServiceImpl();
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码格式
req.getRequestDispatcher("utf-8");
//获取传入的 用户名和密码
String username = req.getParameter("username");
String password = req.getParameter("password");
//用户传入的数据 进入业务层
try {
User u = dao.login(username, password);
//登录成功 共享 u 作为标识 说明我们已经登录成功 , 可以给 /product 那边作判断 , 避免有人可以直接访问/product
req.getSession().setAttribute("USER_IN_SESSION", u);
resp.sendRedirect("/product");
} catch (Exception e) {
req.setAttribute("errorMsg", e.getMessage());
req.getRequestDispatcher("/login.jsp").forward(req, resp);
}
}
}
image-20200519111431394.png