登錄頁面
符合 3層架構(gòu) (體現(xiàn)責(zé)任分離 , 低耦合高內(nèi)聚)
思路 :
瀏覽器-->login.jsp-->servlet-->service-->UserServiceImpl-->IUserDAO-->UserDAOImpl-->數(shù)據(jù)庫
瀏覽器 <--login.jsp<--servlet<--service<--UserServiceImpl<--IUserDAO<--UserDAOImpl<--數(shù)據(jù)庫

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 {
//設(shè)置編碼格式
req.getRequestDispatcher("utf-8");
//獲取傳入的 用戶名和密碼
String username = req.getParameter("username");
String password = req.getParameter("password");
//用戶傳入的數(shù)據(jù) 進(jìn)入業(yè)務(wù)層
try {
User u = dao.login(username, password);
//登錄成功 共享 u 作為標(biāo)識 說明我們已經(jīng)登錄成功 , 可以給 /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