본문 바로가기
Exception (예외)/프론트

Exception (예외)

by Hwanii_ 2023. 7. 16.
728x90

MVC 패턴으로 

프론트는 JSP 를 사용해서 구현 했고,

Model 과 View 를 연결 하기 위한, Controller 는 서블릿으로 구현 했다.

 

 

회원 가입을 시도.

 

 

 

회원 가입 을 클릭 하자 마자, 무언가 에러가 발생 했다.

 

 

MID 라는 이름을 가진 칼럼은 null 값 일 수 없다는 에러 같다.

 

DB 쪽 문제인듯 해서, 확인해 보았다.

 

JDBC 인터페이스는 문제 없었고, MemberDAO 내부 코드도 이상이 없었다.

 

그래서, SignupAction.java 파일을 확인해 보았다.

 

 

insert() 를 하기 전에, mVO 객체에 mid, mpw, name 을 set 하는 상황 이다.

 

 

확인해보니, 셋다 null 인 상황 이다.

 

생각해보니까, 무언가 잘못된점을 느꼈다.

 

 

View 에서, 회원 가입 링크를 클릭 하면, signup.do 로 가게 되어 있었다.

 

 

FrontController.java == 서블릿 을 확인 해보니,

signup.do는, SignupAction 이라는 POJO 클래스에서 execute() 메서드를 실행하는 상황.

 

 

근데, 이 SignupAction 클래스는  사용자가 입력한 값을 모두 받아서,

DB에 데이터를 전달 해주는 POJO 클래스 이다.

 

당연히 mid, mpw, name 을 입력 하지 않았으니,

해당 프로퍼티 들의 값이 null 일 수 밖에 없는 상황 이다.

 

 

그래서 View 에서, 경로가 signup.do 가 아니라, signupPage.do 로 수정 해 줘야 한다.

 

 

 

그러면, SignupPageAction POJO 클래스로 오게 된다.

 

이 클래스는, V에서 V로 바로 갈 수 없으니까,

 

V가 C에게 요청 하기 위한 클래스 이다.

 

C야 ~ 나 회원 가입 하려고 하는데, 회원 가입 하기 위한 페이지로 보내줘 ~

 

그러면 C는 요청을 받고, ㅇㅋ e_signup.jsp 로 이동 시켜 줄게 ~

하는것이다.

 

 

그러면 이렇게 회원 가입을 할 수 있는 페이지로 오게 된다.

 

이곳 에서 사용자가, mid랑 mpw랑 name 이랑 모두 text로 입력 해서, submit을 하면,

post 방식으로, signup.do로 데이터를 보내게 된다.

 

 

그러면 이제, FrontController.java

즉, 서블릿 에서 이쪽으로 오게 되고,

SignupAction 클래스에서 execute() 메서드를 수행하고,

forward 참조변수에 결과값을 저장 한다.

 

 

이 페이지에서, 이제서야 mid, mpw, name 데이터를 V 로부터 잘 ~ 전달 받아서,

insert() 메서드를 잘 수행할 수 있게 됬다.

 

여기서 위에서 말한, execute() 메서드를 수행하고 나온 결과값은 아래와 같다.

 

insert() 해서 회원의 정보를 DB 에 잘 저장 했으니,

 

다음 페이지로 특별하게 보낼 데이터가 없으면 forward가 아니라, redirect 이다.

 

그래서, redirect 인데 ? 라는 결과값을 forward 참조변수에 set 하고,

 

어디 페이지로 가야할건지 경로를 지정해 줘야 하기 때문에,

마찬가지로, forward 참조변수에 경로를 set 해준다.

 

이렇게 두가지의 정보를 set 하고, 해당 정보가 담긴 forward 객체를 return 하게 된다.

 

그러면, FrontController.java 에서 forward 객체를 활용 해서,

 

웹 브라우저에게 데이터를 전송 하게 된다 ~

 

위의 경우는, 전송할 데이터가 없다고 했으니, 아래의 코드를 사용 하게 된다.

 

if(forward != null) {
	
    if(forward.isRedirect()) {	//	보낼 데이터가 없어 ?
    	response.sendRedirect(forward.getPath());
    }
    else {	//	보낼 데이터가 있어 ?
    	request.getRequestDispatcher(forward.getPath()).dispatcher.forward(request, response);
    }
}

 

else 의 경우.

즉, 보낼 데이터가 있는 경우는 아래와 같이 코드를 작성 하면 된다.

 

request.getRequestDispatcher(forward.getPath()).dispatcher.forward(request, response);

 

 

 

[ 흐름 정리 ]

 

 

서블릿으로 signupPage.do 를 보내고,

 

 

그러면, command == signupPage.do 인 else if 문에 걸리고,

 

 

회원가입을 위한 e_signup.jsp 로 경로를 set 해서 return 해주고,

 

 

forward.isRedirect() == true 이기에,

response.sendRedirect("e_signup.jsp"); 가 되고, 해당 경로로 페이지 이동을 해준다.

 

 

아이디, 비밀번호, 이름을 3333 으로 해서 submit 하기.

 

 

submit을 누르면, 서블릿으로 signup.do 를 보내고,

 

 

그러면, command == signup.do 인 else if 문에 걸리고,

 

 

DB로 insert() 를 해주기 위한 POJO 클래스 이다.

 

 

아직, mid, mpw, name 이 null 이지만, 아래를 보자.

 

 

 

사용자가 입력한 mid, mpw, name 값이 잘 전달된 모습을 확인 할 수 있다.

 

mDAO.insert() 가 잘되어서, flag == true 가 됬고,

 

 

forward는 path와 redirect 를 set 해서 return 해줬기 때문에, 해당 값을 가지고,

FrontController (서블릿) 이 잘 수행 하고 회원 가입을 마무리 한다.

 

 

 

 

 

DB에 insert() OK

반응형

'Exception (예외) > 프론트' 카테고리의 다른 글

NullPointerException (예외)  (0) 2023.07.29
JSP 500번 에러  (0) 2023.06.27