전체 흐름 요약


[요청]   /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>

[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");
		}
	}
}