JSP/model 2

MVC 회원관리 (2) - 회원가입

Kiwisae 2022. 9. 19. 12:41
  • DBCP 방식
  • request, session 객체 공유 설정
  • Controller 클래스 : Java Servlet
  • Service, DTO, DAO 클래스, Model (Service + DAO)
  • View (화면 인터페이스) : EL, JSTL 사용

 

 

프로그램 구조

 

Java Resources > src Controller 클래스 Controller  MemberController.java  
DTO 클래스 model MemberDTO.java  
DAO 클래스 dao MemberDAO.java  
Action 인터페이스 service Action.java 인터페이스
ActionForward 클래스 ActionForward.java  
회원가입 MemberInsert.java Action 상속
ID중복검사 IdCheck.java Action 상속
로그인 Login.java Action 상속
로그아웃 Logout.java  
정보수정 폼 UpdateMember.java  
정보수정 Update.java Action 상속
회원탈퇴 폼 DeleteMember.java  
회원탈퇴 Delete.java Action 상속
WebContent > member 메인 페이지 main.jsp    
회원가입 폼 memberform.jsp member.js  
ID 중복검사 idcheck.jsp    
로그인 폼 loginform.jsp login.jsp login.js
수정 폼 updateform.jsp    
삭제 폼 deleteform.jsp    
로그아웃 logout.jsp    
WebContent > WEB-INF
> lib
라이브러리 cos.jar jstl-1.2jar ojdbc6.jar
WebContent > META-INF 커넥션 풀 context.xml    
WebContent > sql DB member.sql    
WebContent 인덱스 index.jsp    

 

 

 

 

MVC 구조

 

 

 

 


 

 

 

MemberController.java의 doProcess 메소드 하단에 Action과 ActionForward를 불러온다.

패키지가 다르기 때문에 import도 해야 한다.

 

 

		Action action = null;
		ActionForward forward = null;
		
		/****************************포워딩처리****************************/
        
		if(forward != null) {
			if(forward.isRedirect()) {	// redirect 방식으로 포워딩
				response.sendRedirect(forward.getPath());
			} else {				// dispatcher 방식으로 포워딩
				RequestDispatcher dispatcher =
						request.getRequestDispatcher(forward.getPath());
				dispatcher.forward(request, response);
			}
		}

 

 

 

 

 

service > MemberInsert.java 생성

클래스로 생성하고 Action을 상속한다.

초기에는 오류가 나는데 아직 메소드 오버라이딩을 하지 않아서 그렇다 

 

 

오류 마크를 더블클릭해서 오버라이딩을 완료하고, 

추후 오류 발생 시 발생 위치를 알기 쉽도록 콘솔창에 자기 자신을 출력하는 코드를 작성한다.

 

 

 

메소드 안에 이름이 forward인 ActionForward 객체를 생성하고 return 값은 forward로 설정한다.

 

 

package service;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class MemberInsert implements Action {

	@Override
	public ActionForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println("MemberInsert");
		
		ActionForward forward = new ActionForward();
		return forward;
	}
	
}

 

 

 

 

MemberController.java에 다음과 같은 내용을 작성한다.

memberform.jsp의 Action값 MemberInsert.do 값이 들어올 경우 true/false 여부에 따라 실행될 내용이다.

 

		if(command.equals("/MemberInsert.do")) {	
	
			try {
				
				action = new MemberInsert();
				forward = action.execute(request, response);
				
			} catch (Exception e) {
				e.printStackTrace();
			} 
			
		}

 

 

 

 

 

memberform.jsp

html 시간부터 생성한 내용을 계속 디벨롭 해오면서 새로운 내용을 공부하고 있다.

이번에는 일전에 model 1에서 했던 내용을 그대로 가져왔다.

 

유효성 검사를 하기 위해 같은 폴더의 member.js 파일을 불러오도록 되어 있는데,

여러 문서를 왔다갔다 하다보면 다음과 같은 형식의 상대 경로는 찾아가지 못할 수도 있다.

 

 

 

 

그래서 현재 프로젝트 명을 구해주는 get.ContextPath()를 사용하여

절대 경로로 수정해준다.

 

<script src="<%= request.getContextPath() %>/member/member.js"></script>

 

 

 

폼 태그는 post 방식으로 전달하도록 설정되어 있고,

action 값은 여태까지 ~~.jsp 파일로 다이렉트 연결 했지만

앞으로는 컨트롤러 파일의 어노테이션 값을 찾아가도록 설정한다.

 

<form method="post" action="<%=request.getContextPath() %>/MemberInsert.do">

 

 

 

프로젝트 명을 직접 적게 된다면 지금 당장은 상관없으나,

서버 배포시 문제가 발생할 수 있다.

그러니 request.getContextPath() 를 적극 활용하도록 한다.

 

 

 

MemberInsert.java

 

회원가입 폼의 값을 받아온다.

 

 

intro 값 아래에 DAO 객체를 생성해 DB를 연결한다.

DAO 문서의 insert 메소드를 매개변수 member를 통해 호출하며,

만약 결과값으로 1을 돌려받으면 콘솔창에 "회원가입 성공"이라는 메시지를 띄운다.

 

(아직 insert 메소드를 생성하지 않아 오류가 발생한다.)

 

 

 

 

아까 생성한 forward 객체 하단에

포워드 방식과 포워딩 할 페이지 명을 작성한다.

실제 포워딩은 Controller에서 수행하게 된다.

 

 

 

MemberDAO.java > insert 메소드

 

 

 

 

memberform.jsp를 실행해 회원가입을 진행해본다.

캡쳐는 못했지만 회원가입 폼을 submit으로 넘기자마자 alert 알림창이 떴고,

확인을 눌렀더니 MemberInsert.do로 페이지 이동했다.

콘솔창에 메시지가 잘 뜨고, DB에도 데이터가 잘 넘어갔다.

 

 

 

ID를 test로 설정했는데,

ID 중복검사가 되지 않고 있다.

primary key로 설정해서 ID 컬럼에는 test 라는 값이 더 이상 들어가서는 안되는데

사용 가능한 ID 라고 출력이 된다.

 

 

 

 

 

service.Idcheck.java를 생성

Action 클래스를 상속 받고,

메소드 오버라이딩한다.

 

request.getParameter로 id 값을 전달받고

System.out.println으로 클래스명과 id 값을 출력하도록 한다.

 

이렇게 하면 에러 발생시 어디까지는 잘 진행되고 어디서부터 에러 발생으로 진행이 막혔는지

잘 알 수 있게 된다.

 

 

 

 

MemberController.java 로 이동

기존에 작성한 회원가입 if문에

else if로 블록처리한 부분을 이어서 작성한다.

 

 

 

 

IdCheck.java에 DAO 객체를 생성해 DB와 연결한다.

 

 

 

 

 

 

 

DAO클래스 > IdCheck 메소드 생성

 

 

 

 

서버를 재구동해서 memberborm.jsp를 실행하여

중복 아이디를 입력 후 중복검사 실행을 해본다.