Front-end

JSP & Servlet DAY 7 ( Maven Project 에서 MVC 패턴을 활용한 회원관리 시스템 실습 ( JDBC 활용 ) )

도키마 2024. 8. 1. 17:33



 

 

 

 

오늘의 노래 추천 😈

 

 
BEAUTIFUL MONSTER
아티스트
STAYC(스테이씨)
앨범
WE NEED LOVE
발매일
1970.01.01

 

beautiful monster 들을 때가 된것같아요 다들



 

 

 

 

 

 

 

 

 

 

DAY 7

 

 

 

 

 

 

 

 

 

 

 

 

ㅡ  Maven ㅡ

Build의 자동관리 도구 maven

 

 

Build 란?

 ㅡ> project에서 사용된 여러 소스코드 등을 실행가능한 독립적 소프트웨어 산출물로 바꿔주는 과정

프로젝트가 완성되면 코드 파일을 WAR, JAR 등 실행가능한 압축파일로 만드는 과정

 

war, jar

 

 

 

 

maven 은  pom.xml 설정파일을 이용해 라이브러리를 자동 다운로드함

표준화된 포멧으로 협업이 유리하고 다양한 plug in으로 작업 자동화 

 

" Graddle 이 뜨는 추세니까 따로 찾아보길 추천 "

 

 

 

 

 

 

 

 

ㅡ Dynamic Web Project ㅡ> Maven convertㅡ

Maven convert

 

configure

 

Group Id

 

Dynamic Web Project 를 Maven Project 로 convert

ㅡ> pom.xml 파일 생성됨

 

 

 

 

 

 

 

 

 

 

 

 

ㅡ MVC 패턴을 이용한 회원관리 시스템 실습 ( Maven Project ) ㅡ

MVC, JDBC, Maven

 

 

 

 

pom.xml 에 ojdbc 라이브러리를 넣어주기위해 dependencies 태그 생성

 

dependencies

 

 

 

 

https://mvnrepository.com/

 

ojdbc8 의 dependency 태그를 불러오기 위해 maven repository 사이트 접속

<!-- https://mvnrepository.com/artifact/com.oracle.database.jdbc/ojdbc8 -->
<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>21.1.0.0</version>
</dependency>

 

Libraries

 

ojdbc8 dependency 내용을 dependencies 태그 내 추가하면 libraries에 생성됨

 

 

 

ㅡ main.jsp 파일 생성 ㅡ

main.jsp

 

<body>
	<h1>main page</h1>
	<ul>
		<li><a href="join.jsp">JOIN</a></li>
		<li><a href="login.jsp">LOGIN</a></li>
	</ul>
</body>

 

 

 

 

ㅡ join.jsp 파일 생성 ㅡ

join.jsp

 

<body>
	<!-- 회원 가입 : 사용자의 정보를 입력받아 DB에 저장 >> DB에 Table이 있어야함 -->
	<form action=joinService.jsp method="post">
		ID : <input type="text" name="id" placeholder="아이디를 입력하세요"><br>
		PW : <input type="password" name="pw" placeholder="비밀번호를 입력하세요"><br>
		Nick : <input type="text" name="nick" placeholder="닉네임을 입력하세요"><br>
		<button type="submit">JOIN</button>
	</form>
</body>

 

http 라는 프로토콜에서 client가 요청을 보내는 것으로 기능이 시작됨

 

 

 

 

ㅡ joinService.jsp 파일 생성 ㅡ


<사용자 (join)요청 처리 단계>

1. 데이터 수집 (parameter 수집)

2. DB에 정보 저장 (JDBC)

3. 페이지 이동 (후 화면 구현)

 

<body>
	<%
		// 사용자 요청(request) 처리 단계
		// 1. 데이터 수집(parameter 수집)
		// 입력값을 가지고 있는 객체가 request이기 때문에 request를 인코딩
		request.setCharacterEncoding("UTF-8");
		// 사용자의 요청를 가진 request의 getParameter 메서드 사용 후 변수 저장
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String nick = request.getParameter("nick");

		// 2. 기능 실행
		// DB에 정보 저장 (JDBC 활용)

		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		int cnt = 0;

		try { // 1. driver 동적로딩 
			Class.forName("oracle.jdbc.driver.OracleDriver");

			// 2. DB 연결
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String user = "hr";
			String password = "12345";

			conn = DriverManager.getConnection(url, user, password);

			if (conn != null) {
		System.out.println("연결성공");
			} else {
		System.out.println("연결실패");
			}

			// 3. sql Query문 작성
			// MEMBER2 테이블에 값 추가를 위해 insert into ~ values 사용
			String sql = "INSERT INTO MEMBER2 VALUES(?,?,?)";
			// prepareStatement 준비된 상태
			psmt = conn.prepareStatement(sql);

			// ? 인자 채워주기 (데이터 바인딩)
			psmt.setString(1, id);
			psmt.setString(2, pw);
			psmt.setString(3, nick);

			// 4. sql 문 실행
			// executeQuery 는 Resultset이 리턴타입
			// executeUpdate 는 int가 리턴타입
			cnt = psmt.executeUpdate();

		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			try { // 사용한 객체 닫기
		if (rs!=null) rs.close();
		if (psmt!=null) psmt.close();
		if (conn!=null) conn.close();
			} catch (Exception e2) {
		e2.printStackTrace();
			}
		}
		// 실행 결과가 정상적인지 확인(cnt)
		if (cnt>0) {
			System.out.print("회원가입을 환영합니다");
		} else {
			System.out.print("회원가입에 실패하였습니다");
		}

		// 3. 페이지 이동(후 화면 구현)
		response.sendRedirect("main.jsp");
	%>
</body>

 

main 출력 결과
콘솔창

 

 

 


 

 

 

여기까지 기본적인 회원가입을 위한 JDBC 코드를 jsp 파일에 구현완료

 

Model : 데이터를 다루기 위해 만든 도구/클래스, 혼자서 실행 X (java)

View : 사용자의 눈에 보여지는 페이지 (html, jsp)Controller : 요청을 받았을 때, 특정 기능을 실행하는 주체 (Servlet)

 

ㅡ> MVC 패턴을 이용해

 

 

 

 

ㅡ MVC 구성을 위한 controller 패키지 생성 ㅡ

group id = 도메인명.회사명(팀명) = com.smhrd

artifact id = controller

 

group id + artifact id ==> 패키지 명 생성

 

 

 

 

ㅡ JoinController 클래스 생성 ㅡ

JoinController 클래스에 joinService 내의 코드를 복붙해줌

 

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 사용자 요청(request) 처리 단계
		// 1. 데이터 수집(parameter 수집)
		// 입력값을 가지고 있는 객체가 request이기 때문에 request를 인코딩
		request.setCharacterEncoding("UTF-8");
		// 사용자의 요청를 가진 request의 getParameter 메서드 사용 후 변수 저장
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String nick = request.getParameter("nick");

		// 2. 기능 실행
		// DB에 정보 저장 (JDBC 활용)

		Connection  conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		int cnt = 0;

		try { // 1. driver 동적로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");

			// 2. DB 연결
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String user = "hr";
			String password = "12345";

			conn = DriverManager.getConnection(url, user, password);

			if (conn != null) {
				System.out.println("연결성공");
			} else {
				System.out.println("연결실패");
			}

			// 3. sql Query문 작성
			// MEMBER2 테이블에 값 추가를 위해 insert into ~ values 사용
			String sql = "INSERT INTO MEMBER2 VALUES(?,?,?)";
			// prepareStatement 준비된 상태
			psmt = conn.prepareStatement(sql);

			// ? 인자 채워주기 (데이터 바인딩)
			psmt.setString(1, id);
			psmt.setString(2, pw);
			psmt.setString(3, nick);

			// 4. sql 문 실행
			// executeQuery 는 Resultset이 리턴타입
			// executeUpdate 는 int가 리턴타입
			cnt = psmt.executeUpdate();

		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			try { // 사용한 객체 닫기
				if (rs != null)
					rs.close();
				if (psmt != null)
					psmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		// 실행 결과가 정상적인지 확인(cnt)
		if (cnt > 0) {
			System.out.print("회원가입을 환영합니다");
		} else {
			System.out.print("회원가입에 실패하였습니다");
		}

		// 3. 페이지 이동(후 화면 구현)
		response.sendRedirect("main.jsp");
	}

 

url mapping은 "Join" 으로 ( join.jsp의 form 태그 action도 변경해줘야함 )

 

 

 

 

 

ㅡ MVC 구성을 위한 model 패키지 생성 ㅡ

group id = 도메인명.회사명(팀명) = com.smhrd

artifact id = model

 

group id + artifact id ==> 패키지 명 생성

 

 

 

 

ㅡ MemberDAO 클래스 생성 ㅡ

DB에 접근해 상호작용하는 method를 정의하는 클래스

JoinController 의 JDBC 코드를 복붙 ㅡ> join 메서드 생성

 

* join 메서드는 sql 문 실행을 위해 id, pw, nick 변수를 파라미터로 받아줘야함

** join 메서드는 sql 문 실행 결과를 리턴함 (리턴타입 int)

 

	// DAO (Data Access Object)
	// DB에 접근해 상호작용을 하는 기능(method)을 정의하는 클래스

	// SQL문을 실행시키기 위해 필요한 데이터를 매개변수로 받아옴
	// SQL문 실행 결과를 리턴함
    
        // 분업 및 비슷한 기능끼리 모아놓기 위함 >> 유지보수 용이, 중복 차단

	// 1. 회원가입(join 메서드)
	public int join(String id, String pw, String nick) {

		Connection conn = null;
		PreparedStatement psmt = null;
		ResultSet rs = null;
		int cnt = 0;

		try { // 1. driver 동적로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");

			// 2. DB 연결
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String user = "hr";
			String password = "12345";

			conn = DriverManager.getConnection(url, user, password);

			if (conn != null) {
				System.out.println("연결성공");
			} else {
				System.out.println("연결실패");
			}

			// 3. sql Query문 작성
			// MEMBER2 테이블에 값 추가를 위해 insert into ~ values 사용
			String sql = "INSERT INTO MEMBER2 VALUES(?,?,?)";
			// prepareStatement 준비된 상태
			psmt = conn.prepareStatement(sql);

			// ? 인자 채워주기 (데이터 바인딩)
			psmt.setString(1, id);
			psmt.setString(2, pw);
			psmt.setString(3, nick);

			// 4. sql 문 실행
			// executeQuery 는 Resultset이 리턴타입
			// executeUpdate 는 int가 리턴타입
			cnt = psmt.executeUpdate();

		} catch (Exception e) {

			e.printStackTrace();
		} finally {
			try { // 사용한 객체 닫기
				if (rs != null)
					rs.close();
				if (psmt != null)
					psmt.close();
				if (conn != null)
					conn.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
		// SQL문 실행결과 리턴
		return cnt;
	}

 

 

 

 

 

ㅡ JoinController 클래스 수정 ㅡ

클래스 내 JDBC 코드를 지우고 MemberDAO 객체 생성 후 join 메서드 호출

 

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 사용자 요청(request) 처리 단계
		// 1. 데이터 수집(parameter 수집)
		// 입력값을 가지고 있는 객체가 request이기 때문에 request를 인코딩
		request.setCharacterEncoding("UTF-8");
		// 사용자의 요청를 가진 request의 getParameter 메서드 사용 후 변수 저장
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String nick = request.getParameter("nick");

		// 2. 기능 실행
		// DB에 정보 저장 (JDBC 활용)
		MemberDAO dao = new MemberDAO();
		int cnt = dao.join(id, pw, nick);
		
		// 실행 결과가 정상적인지 확인(cnt)
		if (cnt > 0) {
			System.out.print("회원가입을 환영합니다");
		} else {
			System.out.print("회원가입에 실패하였습니다");
		}

		// 3. 페이지 이동(후 화면 구현)
		response.sendRedirect("main.jsp");
	}

 

 

 

 

 

ㅡ MemberDAO 클래스 내 중복 제거 ㅡ

중복 변수는 field 영역으로, 중복 코드는 새로운 메서드로 정의

 

* throws Exception : 메서드 내 오류를 반드시 오류 처리하는 구문 ( try/catch 구문을 강제함 )

 

	// 중복 변수 필드 영역으로 이동
	Connection conn = null;
	PreparedStatement psmt = null;
	ResultSet rs = null;
	int cnt = 0;

	public void getConn() throws Exception {

		try { // driver 동적로딩
			Class.forName("oracle.jdbc.driver.OracleDriver");

			// DB 연결
			String url = "jdbc:oracle:thin:@localhost:1521:xe";
			String user = "hr";
			String password = "12345";

			conn = DriverManager.getConnection(url, user, password);

			if (conn != null) {
				System.out.println("연결성공");
			} else {
				System.out.println("연결실패");
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public void close() {
		try { // 사용한 객체 자원 반납
			if (rs != null)
				rs.close();
			if (psmt != null)
				psmt.close();
			if (conn != null)
				conn.close();
		} catch (Exception e2) {
			e2.printStackTrace();
		}
	}

	// 1. 회원가입
	public int join(String id, String pw, String nick) {

		try {
			getConn(); // DB 연결

			// MEMBER2 테이블에 값 추가를 위해 insert into ~ values 사용
			String sql = "INSERT INTO MEMBER2 VALUES(?,?,?)";
			psmt = conn.prepareStatement(sql);
			// ? 인자 채워주기 (데이터 바인딩)
			psmt.setString(1, id);
			psmt.setString(2, pw);
			psmt.setString(3, nick);

			// 4. sql문 실행
			cnt = psmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 자원 반납
			close();
		}
		// SQL문 실행결과 리턴
		return cnt;
	}

 

 

 

 

ㅡ main.jsp 실행 ㅡ

 

콘솔 결과

 

 

 

 


 

 

 

 

여기까지 JoinController와 MemberDAO 클래스 작성 완료

 

패키지 구조

 

 

 

 

ㅡ MemberDTO 클래스 생성 ㅡ

* 데이터 변형방지를 위해 필드 값을 private로 선언필드의 변수값을 각각 초기화 해주는 생성자

 

ㅡ> DTO 는 데이터 값을 이동할 때 잠깐 담아줄 수 있는 "바구니"라고 생각하면 편함

 

	// DTO (Data Transfer Object)
	// 계층간(서로 다른 파일) 데이터를 주고받을 때, 담아 보낼 수 있는 바구니
	// 데이터를 클래스의 필드에 저장하고 담고 빼는 기능
	
	// 1. 테이블과 같은 모양으로 설계(테이블 당 DTO 한 개씩)
	// 같은 모양 >> 테이블이 있는 컬럼명 == 필드 이름
	// ㅡ> 자료형이 일치되도록 필드 선언
	
	// 2. 데이터가 쉽게 변형되지 않게끔 private 로 필드 선언
	
	// 3. Getter/Setter 가 존재해야함 (alt+shift+s)
	
	// 4. 기본 생성자가 있어야함
	// >> 유연성
	// >> MyBatis 와 같은 라이브러리에서 기본 생성자 요구
	
	private String id;
	private String pw;
	private String nick;

	public MemberDTO() {} // 기본 생성자 : 객체 생성 역할

	public MemberDTO(String id, String pw, String nick) {
		super();
		this.id = id;
		this.pw = pw;
		this.nick = nick;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getNick() {
		return nick;
	}

	public void setNick(String nick) {
		this.nick = nick;
	}

 

 

 

 

 

ㅡ MemberDAO, JoinConTroller 클래스 수정 ㅡ

MemberDAO 의 join 메서드가 받는 파라미터를 MemberDTO 타입의 dto 변수로 수정

 

JoinConTroller 의 request 요청값 저장 변수는 dto의 setter 메서드로 필드값 초기화

MemberDAO 에서는 dto 의 getter 메서드로 값 불러오기

 

		// DTO에 담아두기
		MemberDTO dto = new MemberDTO();
		dto.setId(id);
		dto.setPw(pw);
		dto.setNick(nick);
		
		// 2. 기능 실행
		// DB에 정보 저장 (JDBC 활용)
		MemberDAO dao = new MemberDAO();
		int cnt = dao.join(dto);

 

	public int join(MemberDTO dto) {

		try {
			getConn(); // DB 연결

			// MEMBER2 테이블에 값 추가를 위해 insert into ~ values 사용
			String sql = "INSERT INTO MEMBER2 VALUES(?,?,?)";
			psmt = conn.prepareStatement(sql);
			// ? 인자 채워주기 (데이터 바인딩)
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPw());
			psmt.setString(3, dto.getNick());

 

 

 

 

 


 

 

 

 

같은 방식으로 login 메서드 추가하기

 

 

 

 

ㅡ login.jsp 파일 생성 ㅡ

login.jsp

 

<body>
	<form action="Login" method="post">
		ID : <input type="text" name="id" placeholder="아이디를 입력하세요"><br>
		PW : <input type="password" name="pw" placeholder="비밀번호를 입력하세요"><br>
		<button type="submit">LOGIN</button>
	</form>
</body>

 

 

 

 

 

ㅡ MemberDAO 에서 login 메서드 생성 ㅡ

select 쿼리문을 사용해 로그인 메서드 작성

dto 를 파라미터로 받고 sql문 실행 후 MemberDTO 타입의 데이터를 리턴함

 

	// 2. 로그인
	public MemberDTO login(MemberDTO dto) {
		
		MemberDTO result=null;
		try {
			getConn(); // DB 연결

			// MEMBER2 테이블에서 id, pw가 일치하는 사용자가 있는지 조회
			String sql = "select * from MEMBER2 where id=? and pw=?";
			psmt = conn.prepareStatement(sql);
			// ? 인자 채워주기 (데이터 바인딩)
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPw());

			// 4. sql문 실행
			rs = psmt.executeQuery();
			// rs의 데이터를 옮겨담기(리턴값을 위함)
			if(rs.next()) {
				
				String id = rs.getString(1);
				String pw = rs.getString(2);
				String nick = rs.getString(3);
				// 리턴하기 위해 id, pw, nick 을 MemberDTO 타입의 변수에 저장
				result = new MemberDTO(id, pw, nick);
			}

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 자원 반납
			close();
		}
		// SQL문 실행결과 리턴
		return result;
	}

 

 

 

 

 

ㅡ LoginController 클래스생성 ㅡ

dto를 파라미터로 받는 login 메서드의 리턴값이 MemebrDTO 타입이므로 MemberDTO 타입의 변수에 리턴값 저장

 

ㅡ> MemberDAO 의 login 메서드 리턴값이 null 인지 아닌지에 따라 로그인 성공 여부 결정

 

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 1. 파라미터 수집
		request.setCharacterEncoding("UTF-8");
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		
		MemberDTO dto = new MemberDTO();
		dto.setId(id);
		dto.setPw(pw);
		
		// 2. 기능 실행
		// id, pw로 DB를 조회
		MemberDAO dao = new MemberDAO();
		MemberDTO result = dao.login(dto);
		
		// 3. 페이지 이동
		if(result!=null) { // 로그인 성공
			System.out.println("로그인 성공");
			response.sendRedirect("main.jsp");
		}else if(result==null){ // 로그인 실패
			System.out.println("로그인 실패");
			response.sendRedirect("login.jsp");
		}
	}

 

콘솔 결과

 

 

 

 

 


 

 

 

 

회원가입, 로그인 결과에 따라 main 페이지 변경하기 (session 이용)

 

ㅡ> 로그인 성공 시, login 메서드 리턴값을 세션에 저장

 

 

	// 3. 페이지 이동(로그인 결과에 따라 main 페이지 변경)
		if(result!=null) { // 로그인 성공
			System.out.println("로그인 성공");
			HttpSession session = request.getSession();
			session.setAttribute("user", result);
			response.sendRedirect("main.jsp");
		}else if(result==null){ // 로그인 실패
			System.out.println("로그인 실패");
			response.sendRedirect("login.jsp");
		}

 

 

 

 

ㅡ main.jsp 파일 수정 ㅡ

로그인 성공 시 저장한 session값을 불러오고 session 값이 null 인지 여부 판단

 

<body>
	<%
		// session에 저장된 사용자 정보 꺼내기
		// session에서 데이터를 꺼낼때는 down casting(형변환)
		MemberDTO user = (MemberDTO)session.getAttribute("user");
	%>
	<h1>main page</h1>
	<ul>
		<% if(user==null) { %>
		<li><a href="join.jsp">JOIN</a></li>
		<li><a href="login.jsp">LOGIN</a></li>
		<% }else{ %>
		<li><a href="">개인정보 수정</a></li>
		<li><a href="">회원 탈퇴</a></li>
		<li><a href="">로그아웃</a></li>
		<% } %>
	</ul>
</body>

 

 

 

 

 


 

 

 

 

로그인 성공 시 개인정보 수정, 회원 탈퇴, 로그아웃 기능 추가

 

 

 

 

ㅡ update.jsp 파일 생성 ㅡ

로그인 성공 후 session 에 저장된 사용자 정보 불러오기 (MemberDTO 타입)

input 태그에 value 속성을 이용해 사용자 정보 띄워주기

 

* 수정이 불가한 id 는 readonly 속성 추가

 

<body>
	<%
		MemberDTO user = (MemberDTO)session.getAttribute("user");
	%>
	<form action="update" method="post">
		ID : <input readonly value="<%=user.getId()%>" type="text" name="id"><br>
		PW : <input value="<%=user.getPw()%>" type="password" name="pw"><br>
		Nick : <input value="<%=user.getNick()%>" type="text" name="nick"><br>
		<button type="submit">UPDATE</button>
	</form>
</body>

 

 

 

 

ㅡ MemberDAO 에서 update메서드 생성 ㅡ

dto와 user를 파라미터로 받는 update 메서드 작성

dto에는 수정된 정보가 저장되어있고, user 는 session 에 저장된 사용자 정보

 

ㅡ> 쿼리문 update set 에서는 사용자가 입력한 수정값인 dto에서 get

사용자를 식별할 wherer 조건에서는 session에 저장된 user 에서 get

 

	// 3. 회원정보 수정
	public int update(MemberDTO dto, MemberDTO user) {

		MemberDTO result = null;
		try {
			getConn(); // DB 연결

			// MEMBER2 테이블에서 user id, pw가 일치하는 사용자의 정보를 update
			String sql = "update member2 set pw=?, nick=? where id=? and pw=?";
			psmt = conn.prepareStatement(sql);
			
			// ? 인자 채워주기 (데이터 바인딩)
			// update set 에는 사용자가 입력한 수정값인 dto에서 get
			// where 조건에서는 session에 저장된 원래 사용자 정보인 user에서 get
			psmt.setString(1, dto.getPw());
			psmt.setString(2, dto.getNick());
			psmt.setString(3, user.getId());
			psmt.setString(4, user.getPw());

			// 4. sql문 실행
			cnt = psmt.executeUpdate();

		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			// 자원 반납
			close();
		}
		// SQL문 실행결과 리턴
		return cnt;
	}

 

 

 

 

ㅡ UpdateController 클래스 생성 ㅡ

리턴값이 int 인 update 메서드의 리턴값에 따라 수정 실패 성공 여부 판단

 

ㅡ> update 성공 시 session 정보를 수정값인 dto로 setAttribute

 

	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 1. 파라미터 로딩
		request.setCharacterEncoding("utf-8");
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String nick = request.getParameter("nick");

		MemberDTO dto = new MemberDTO(id, pw, nick);
		
		// 세션에 저장된 user 정보 getAttribute로 user 변수 저장
		HttpSession session = request.getSession();
		MemberDTO user = (MemberDTO)session.getAttribute("user");
		
		// 2. 기능 실행
		MemberDAO dao = new MemberDAO();
		int cnt = dao.update(dto, user);

		// 3. 페이지 이동(수정 결과에 따라 main 페이지 변경)
		if (cnt>0) { // update 성공
			System.out.println("수정 성공");
			// update 성공할 경우 session 정보를 수정값으로 setAttribute
			session.setAttribute("user", dto);
			response.sendRedirect("main.jsp");
		} else { // update 실패
			System.out.println("수정 실패");
			response.sendRedirect("update.jsp");
		}
	}

 

(수정중)

 




 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 



 

 

 

 

 

BYE