백엔드/Servlet

MVC 패턴으로 DB SELECT 하기

가든_ 2022. 9. 24. 22:20

1. .jsp에서 클라이언트의 입력 값을 controller로 보내기

  • post으로 보내기
    • name, value로 값이 전해진다
    • post와 get 방식 모두 사용 가능하다
<form id="form-no-param" method="post" action="${root}/user">
      <input type="hidden" id="act" name="act" value="login">
      <input type="hidden" id="id" name="id" value="${user.id}">
      <input type="hidden" id="pwd" name="pwd" value="${user.pwd}">
</form>
  • get으로 보내기
<a href="book?action=login&id=${user.id}&pwd=&{user.pwd}">로그인</a>

2. Controller에서 값 받기

  • doPost에서 한글 인코딩 설정해주고
  • doGet에서 값을 받아서 해당하는 함수로 보내준다.(⇒ 관리자 역할)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String act = request.getParameter("act");
		
		String path = "/index.jsp";
		try {
			if("login".equals(act)) {
				path = login(request, response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		doGet(request, response);
}

3. (Controller) → (Model) Service 호출

private String login(HttpServletRequest request, HttpServletResponse response) {
		String userId = request.getParameter("userid");
		String userPwd = request.getParameter("userpwd");
		try {
			MemberDto member = memberService.login(userId, userPwd);
}

4. (Model) Service → (Model) Dao 호출

public MemberDto getMember(String userId, String userPwd) throws Exception {
		return memberDao.loginMember(userId, userPwd);
}

5. (Model) Dao → DB

  • Connection, PreparedStatememt, ResultSet을 선언한다
    • Connection : DB와 연결 시키는 객체
    • PreparedStatement : SQL 실행 시키는 객체
    • ResultSet : SELECT가 실행된 결과가 저장된 객체
  • DB와 연결한다.
    • conn = dbUtil.getConnection();
  • sql문을 작성하고 실행시킨다
    • pstmt = conn.prepareStatement(sql.toString());
  • 결과 값을 저장한다
    • memberDto.setUserName(rs.getString("user_name"));
  • 값 리턴 (Dao → Service → Controller)
public MemberDto loginMember(String userId, String userPwd) throws SQLException {

		MemberDto memberDto = null;

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		try {
			conn = dbUtil.getConnection();

			StringBuilder sql = new StringBuilder();
			sql.append("select * \\n");
			sql.append("from members \\n");
			sql.append("where user_id = ? and user_password = ?");

			pstmt = conn.prepareStatement(sql.toString());
			pstmt.setString(1, userId);
			pstmt.setString(2, userPwd);

			rs = pstmt.executeQuery();

			if(rs.next()) {
				memberDto = new MemberDto();
				memberDto.setUserId(userId);
				memberDto.setUserName(rs.getString("user_name"));
				memberDto.setUserPwd(rs.getString("user_password"));
			}
		} finally {
			dbUtil.close(rs, pstmt, conn);
		}
		return memberDto;
	}

6. (Controller) → (VIEW)리턴 받은 값을 JSP에 뿌린다

  • forward 방식으로 값을 전달시켜준다
request.getRequestDispatcher("/user.jsp").forward(request, response);