전체 흐름 요약
[요청] /user/login.do (GET or POST)
↓
[LoginController]
↓ (service.findUser)
[UserService]
↓ (dao.selectUser)
[UserDAO] → DB 조회 (SHA256 비번 일치 검사)
↑
[UserDTO 생성]
↑
[세션 저장 또는 로그인 실패 result 전달]
↑
[login.jsp 출력 또는 index.do 이동]
정리
| 항목 |
예시 |
| 페이지/기능명 |
로그인 기능 |
| 사용 기술 |
JSP, Servlet, Java, DAO 패턴 |
| 주요 흐름 |
Controller → Service → DAO → DTO |
| 클라이언트 처리 |
JavaScript로 로그인 실패/로그아웃 알림 |
| 설계 의도 |
사용자 인증 및 세션 저장, 권한 부여 |
[1] login.jsp — 로그인 화면
/WEB-INF/view/user/login.jsp
<form action="/farmStory/user/login.do" method="post">
<input type="text" name="uid" placeholder="아이디 입력">
<input type="password" name="pass" placeholder="비밀번호 입력">
<input type="submit" value="로그인">
</form>
<script>
const result = ${result};
if(result == 100){
alert('로그인 실패 했습니다.\n아이디, 비번을 다시 확인하세요.');
}else if(result == 101){
alert('정상적으로 로그아웃 되었습니다.');
}
</script>
- 로그인 실패 시
result=100, 로그아웃 시 result=101로 사용자에게 JS 알림 표시
- 폼 제출 시
/user/login.do로 POST 요청 발생
[2] LoginController.java — 로그인 컨트롤러
@WebServlet("/user/login.do")
public class LoginController extends HttpServlet {
private UserService service = UserService.INSTANCE;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String result = req.getParameter("result");
req.setAttribute("result", result);
RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/view/user/login.jsp");
dispatcher.forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String uid = req.getParameter("uid");
String pass = req.getParameter("pass");
UserDTO dto = new UserDTO();
dto.setUid(uid);
dto.setPass(pass);
UserDTO userDTO = service.findUser(dto);
if(userDTO != null) {
HttpSession session = req.getSession();
session.setAttribute("sessUser", userDTO);
resp.sendRedirect("/farmStory/index.do");
} else {
resp.sendRedirect("/farmStory/user/login.do?result=100");
}
}
}
- GET 요청: 로그인 페이지 진입 시 처리 (
result 값으로 메시지 전달)
- POST 요청: 로그인 폼 제출 처리
- 로그인 성공 →
session에 사용자 정보 저장 후 index.do로 이동
- 실패 → 다시 로그인 페이지로 이동 (
?result=100)