2019년 12월 22일 일요일

컨트롤러 클래스에서의 return이 갖는 의미

아래와 같은 컨트롤러 클래스가 있을 경우 return "getBoardList.do"
혹은 return "getBoardList.jsp"가 갖는 의미가 무엇인가?

@Controller
public class InsertBoardController {

@RequestMapping(value="/insertBoard.do")
public String insertBoard(BoardVO vo, BoardDAO bdDao) {
System.out.println("InsertBoardController 글 등록 처리~");

bdDao.insertBoard(vo);

return "getBoardList.do";  ①
     //return "getBoardList.jsp";  ②
}
}

MVC에서 Controller는 기본적으로 Model에 대한 처리(DB로 부터 적정 정보 획득)와 이후 이동할 페이지 정보(View 정보)를 return 하는 역할이 Controller가 하는 역할이다.

따라서 return "getBoardList.do"가 갖는 의미도 Model에 대한 처리(bdDao.insertBoard(vo);)와 이후 이동할 페이지 정보 즉 View 정보를 반환하는 역할의 의미가 return "getBoardList.do";인 것이다.

따라서 Context Path가 member라고 한다면 return "getBoardList.do";의 실행은 http://localhost/member/getBoardList.do와 같은 url 형태의 request 요청이 발생하게 하는 역할이 return "getBoardList.do";의 의미이다.

return "getBoardList.jsp";의 경우는 /member/getBoardList.jsp를 막바로 호출하는 형태라고 한다면 return "getBoardList.do";의 경우는 getBoardList.do에 해당하는 특정 컨트롤러의 특정 메소드 실행후 그 특정 메소드가 지정하는 .jsp 페이지로의 이동을 의미하게 된다.

참고적으로 Controller 메소드가 return 하는 View 정보는 기본적으로 포워딩 방식으로 동작한다.  
따라서 사용자의 브라우저 주소줄에  
http://xxx.xxx.xx/member/insertBoard.do로 요청에 대해서  
return "getBoardList.do"; 해도  
사용자의 브라우저 주소줄은 http://xxx.xxx.xx/member/insertBoard.do로 변함이 없다.  
만일 포워딩이 아니라 리다이렉트 방식으로 동작하게 할려면  
return "redirect:getBoardList.do";와 같이 해야 한다.   
그러면 사용자의 브라우저 주소줄은 http://xxx.xxx.xx/member/getBoardList.do와 같이 변경되어 나타날 것이다.

댓글 없음:

댓글 쓰기