SPRING

[SPRING] View Resolver 뷰리졸버

예나부기 2021. 7. 19.

Spring Framework의 작동 원리에 대해 다시 짚어보자면,

1.사용자의 요청을 Dispatcher Servlet이 받아들인다.

2.사용자의 요청정보를 분석해서 어떤 컨트롤러를 사용할 것인지 결정

3.해당 컨트롤러에게 사용자 요청에 대한 정보가 담겨있는 request객체를 전달

4.컨트롤러는 요청된 작업이 완료된 후 사용자에게 응답 할 뷰(jsp)를 완성하기 위한 정보와, 사용 할 jsp가 무엇인지에 대한 정보(=Request객체)를 ModelAndView 객체에 담는다.

5.ModelAndView를 전달받은 DispatcherServlet은 그 안에 들어있는 View Name을 추출해서 View Resolver로 전달

6.View Resolver는 그 데이터를 분석해서 해당하는 jsp를 선택 후, jsp를 분석해서 View라는 객체를 만들어서 다시 Dispatcher Servlet으로 전달

7.DispatcherServlet은 이러한 정보를 이용해서 jsp를 완성시킨 다음에 완성된 html코드를 사용자에게 보여준다.

 

View Resolver?

  • 컨트롤러에서 전달받은 View의 이름을 토대로 jsp를 찾아 선택하고, jsp 데이터를 분석해 응답결과를 만들어 전달하는 요소
  • View Resolver에 의해 jsp가 실행되고, 응답 결과가 만들어진다.
  • Controller에서 View를 지정할 때 ViewResolver가 사용할 데이터를 Request영역에 저장할 수 있음
  • ViewResolver가 사용할 View의 이름을 지정하는 방법, jsp를 통해 응답결과를 만들 때 필요한 데이터를 전달하는 방법에 대해 실습해보자!

1.HttpServlerRequest 객체 사용하기

  • SpringMVC는 jsp를 처리할 때 HttpServletRequest객체를 jsp쪽으로 전달합니다.
  • ViewResolver는 이를 이용해 jsp 작업 시 데이터를 사용할 수 있습니다.

예제

1) index.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<a href="test1?data1=100&data2=200">test1</a><br/>
    <hr/>
	<a href="test2">test2</a><br/>
	<hr/>
</body>
</html>

2) TestController생성

@Controller
public class TestController {

	@GetMapping("/test2")
	public String test2(HttpServletRequest request) {
		
		request.setAttribute("data1", 100);
		request.setAttribute("data2", 200);
		
		return "test2";
	}
}

3) test2.jsp생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>test2</h1>
	<h3>data1 : ${requestScope.data1 }</h3>
	<h3>data2 : ${requestScope.data2 }</h3>
</body>
</html>

-request에 담겨져서 오기 때문에 requestScope사용 (생략 가능)

2.Model 사용하기

  • Model객체를 주입받아 세팅하면 HttpServletRequest에 담겨 이를 jsp로 전달할 수 있다.

예제

1) index.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<a href='test3'>test3</a><br/>

</body>
</html>

2) TestController 생성

@Controller
public class TestController {
	
	@GetMapping("/test3")
	public String test3(Model model) {
		
		model.addAttribute("data1", 300);
		model.addAttribute("data2", 400);
		
		return "test3";
	}
}

3) test3.jsp 에서 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>test3</h1>
	<h3>data1 : ${requestScope.data1 }</h3>
	<h3>data3 : ${requestScope.data2 }</h3>
</body>
</html>

3.ModelAndView사용하기

  • ModelAndView는 Model에 값을 세팅하는 기능과 View의 이름을 지정하는 기능을 모두 가지고 있다.

예제

1) index.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<a href='test4'>test4</a><br/>
    
</body>
</html>

2) TestController생성

@Controller
public class TestController {
	
	@GetMapping("/test4")
	public ModelAndView test4(ModelAndView mv) {
		
		mv.addObject("data1", 500);
		mv.addObject("data2", 600);
		
		mv.setViewName("test4");
		
		return mv;
	}
}

-mv.addObject("변수명"); >> Model에 값 세팅

-mv.setViewName("뷰이름"); >> View의 이름 지정

-반환 타입이 ModelAndView인것 주의

3) test4.jsp에서 출력하기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>test4</h1>
	<h3>data1 : ${requestScope.data1 }</h3>
	<h3>data2 : ${requestScope.data2 }</h3>
</body>
</html>

 

'SPRING' 카테고리의 다른 글

[SPRING] Form 커스텀 태그  (0) 2021.07.20
[SPRING] 커맨드 객체  (0) 2021.07.20
[SPRING] 객체로 파라미터 주입 받기  (0) 2021.07.19
[SPRING] 파라미터 추출하기  (0) 2021.07.19
[SPRING] 요청 방식  (0) 2021.07.19

댓글