[Spring] Spring MVC : Model 과 ModelAndView 객체를 사용하여 controller에서 뷰페이지 이동하기

heegon·약 23시간 전
0

Web

목록 보기
14/14

컨트롤러를 통한 뷰페이지 이동 구현

사용자의 요청이 발생하면, 컨트롤러는 그 내용에 맞게 데이터값과 이동할 페이지를 알려주어야 한다.
이때 스프링에서 사용하는 2가지 방식이 있는데 하나는 Model 방식, 또 하나는 ModelAndView 방식이다.
Model 방식에서는 값만 Model에 저장하여 다음 페이지로 넘겨주는 방식인데 이때 이동할 페이지는 return에 String타입으로 담아서 알려주게 된다. 반면 ModelAndView 방식에서는 ModelAndView의 객체를 생성하여 이 객체에 데이터값과 이동할 페이지 모두를 담아서 return 값으로 ModelAndView의 객체를 넘겨주는 방식으로 이루어진다.


Controller (컨트롤러)

컨트롤러로 사용할 자바 클래스의 경우 맨 위에 어노테이션 기능을 이용하여 @Controller 라고 명시해준다.
컨트롤러
1번은 페이지만 이동할 때
2번은 Model 방식으로 값을 가지고 페이지를 이동할 때
3번은 ModelAndView 방식으로 값과 이동할 페이지 정보를 모두 가지고 페이지로 이동할 때
그 각각의 코드이다.


페이지만 이동하는 경우

@RequestMapping("/view")
public String view() {
	return "board/view";
}

데이터값을 넘겨줄 필요는 없고, 단순히 페이지 이동만 필요한 경우에는 위와 같이 작성한다. @RequestMapping("/view") 부분에는 url 경로를 지정해주면 된다.
웹프로젝트를 서버에서 실행해주고, url 부분의 뒷부분에 '/view'를 추가로 입력해주면 return 부분에 따라서 board 폴더 안에 있는 view.jsp 페이지로 이동하게 된다.

view.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title> viewpage</title>
</head>
<body>
view.page 입니다. <br>
</body>
</html>

Model을 이용하여 값을 가지고 페이지를 이동하는 경우

@RequestMapping("/content")
public String content(Model model) {
	model.addAttribute("id", "heegon");
	return "board/content";
}

Model을 이용하여 값을 가진 상태에서 페이지를 이동하는 경우에는 페이지만 이동하는 경우와 마찬가지로 String 타입의 반환값을 가진 메소드를 만들어준다. 아까와 다른 점은 매개변수 부분에 Model model과 같이 Model의 객체를 넣어준다는 점이다. 그리고 메소드 내부에서 model.addAttribute("jsp페이지에서 사용하는 데이터의 id명", 해당 데이터에 넣을 데이터값)과 같은 형태로 작성된다.

content.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>content1 page</title>
</head>
<body>
content 페이지 입니다. <br>
id는 ${id } 입니다. <br>
</body>
</html>

ModelAndView를 이용하여 값과 이동할 페이지를 모두 가진 상태로 페이지를 이동하는 경우

@RequestMapping("/content2")
public ModelAndView content2() {
		
	ModelAndView mv = new ModelAndView();
	mv.addObject("name", "heegonkim");
	mv.setViewName("board/content2");
	
	return mv;
}

ModelAndView 방식에서는 위와 같이 문법이 살짝 다르다. Model방식에서는 addAttribute를 사용하여 데이터값을 넣어주었다면 ModelAndView 방식에서는 addObject()를 통해서 데이터값을 넣어주고, setViewName()을 통해서 이동할 뷰페이지를 알려준다. 그리고 마지막 return 부분에는 이전에 String타입으로 이동할 뷰페이지를 지정했던 것과 다르게 ModelAndView의 객체를 반환해주는 방식으로 끝나게 된다.

content2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>content2 page</title>
</head>
<body>
content2 페이지 입니다. <br>
이름은 ${name } 입니다. <br>
</body>
</html>

정리

정리하자면 다음과 같다.

  • 단순히 페이지만 이동하면 되는 경우에는
public String 메소드명() { 
	return "뷰페이지 경로"; 
}
  • 값을 가지고 Model을 이용해서 페이지를 이동하는 경우에는
public String 메소드명(Model model) {
	model.addAttribute("데이터의 id값", 데이터값);
    return "뷰페이지 경로";
}
  • 값과 페이지를 한 번에 저장하여 페이지를 이동하는 경우에는
public ModelAndView 메소드명() {
	ModelAndView 모델앤뷰객체 = new ModelAndView();
    모델앤뷰객체.addObject("데이터의 id값", 데이터값);
    모델앤뷰객체.setViewName("뷰페이지 경로");
    return 모델앤뷰객체;
}
profile
❤️

0개의 댓글