Spring/Spring MVC

Spring MVC - JSP에 데이터 전달

jddng 2021. 12. 26. 17:26
728x90
반응형

ViewResolver란?

 컨트롤러에서 전달받은 View의 이름을 토대로 JSP를 찾아주며 JSP에서 사용하는 데이터를 분석해

응답 결과(사용자 요청 화면)를 만들어 전달하는 요소이다. 

 JSP를 통해 응답 결과를 처리할 때 필요한 데이터를 JSP에 전달하는 방법에 대해 알아보자.

 

 


jsp에 데이터 전달 방법

  • param
  • HttpSevletRequest
  • Model
  • ModelAndView

위 4가지 방법은 개발자의 취향 차이이다. 어떤 방법을 쓰던 상관없다.

 

 

param 

 클라이언트에서 서버로 전달한 데이터들은 JSP에서 그대로 사용할 수 있다.

 

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/>
    
</body>
</html>

 

testController.java

@Controller
public class testController {

	@GetMapping("/test1")
	public String test1() {
		return "test1";
	}
}

 

test1.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>test1</h1>
	<h3>data1 : ${param.data1 }</h3>
	<h3>data2 : ${param.data2 }</h3>
</body>
</html>
param.data1
param.data2
 - 클라이언트가 index.jsp에서 data1과 data2의 데이터를 서버에 보냈다
 - JSP에서는 클라이언트가 보낸 데이터 data1, data2를 param을 이용해 데이터를 가져올 수 있다.

결과 화면


HttpServletRequest 객체 사용

 이 방식은 Controller에서 직접 데이터 값을 request 영역에 저장한 후 JSP에서 저장한 데이터 값을 사용하는 방법이다.

 

 

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='test2'>test2</a><br/>

</body>
</html>

 

testController.java

@Controller
public class testController {

	@GetMapping("/test2")
	public String test2(HttpServletRequest request) {
		
		request.setAttribute("data1", 100);
		request.setAttribute("data2", 200);
		
		return "test2";
	}
}
public String test2(HttpServletRequest request) {
 - Mapping된 메서드에 직접 HttpSevletRequest를 주입하여 request 영역에 데이터를 저장하는 방법이다.

request.setAttribute("data1", 100);
 - setAttribute 메서드를 이용해 request 영역에 데이터를 저장할 수 있다.
 - setAttribute( KEY, VALUE )

 

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>test1</h1>
	<h3>data1 : ${data1 }</h3>
	<h3>data2 : ${requestScope.data2 }</h3>
</body>
</html>
 request 영역에 저장된 데이터는 데이터명으로 EL을 쓸 수 있지만,  어느 저장소에서 가져오는지
명시하기 위해 requestScope를 써주는 게 좋다

결과 화면

 

 


 

Model 객체 사용

 Model 객체를 주입받아 데이터를 저장하면 Model 객체는 HttpServletRequest 객체에 저장되어 request 영역에 

데이터가 저장된다. 따라서 request 영역에서 Model 객체를 통해 저장된 데이터를 사용할 수 있다.

 

 

testController.java

@Controller
public class testController {

	@GetMapping("/test3")
	public String test3(Model model) {
		
		model.addAttribute("data1", 300);
		model.addAttribute("data2", 400);
		
		return "test3";
	}
}
public String test3(Model model) {
 - request 영역에 데이터를 저장하기 위해 Model를 주입

model.addAttribute("data1", 300);
 - addAtrribute를 이용해 데이터를 model 객체에 저장할 수 있다.
 - Model 객체는 자동으로 HttpServletRequest 객체에 저장된다.
 - addAttribute( KEY, VALUE )

 

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 }</h2>
	<h3>data1 : ${requestScope.data2 }</h2>
</body>
</html>

결과

 


 

방법 4 - ModelAndView 객체 사용

 ModelAndViewModel에 값을 저장하는 기능과 View의 이름을 지정하는 기능 모두 가지고 있다.

우리가 지금까지 return 값을 View 이름으로 반환했는데, 이렇게 할 수 있었던 이유는 ModelAndView

자동으로 return 반환 값을 View 이름으로 지정해주기 때문이었다.

 

 Veiw의 이름을 ModelAndView 지정하기 때문에 반환 값을 ModelAndView해야 한다.

 

 

testController.java

@Controller
public class testController {

	@GetMapping("/test4")
	public ModelAndView test4(ModelAndView mv) {
		mv.addObject("data1", 100);
		mv.addObject("data2", 200);
		
		mv.setViewName("test4");
		return mv;
	}
}
public ModelAndView test4(ModelAndView mv) {
 - 데이터를 저장하기 위해 ModelAndView를 주입

mv.addObject("data1", 100); 
 - addObject를 이용해 데이터를 저장

mv.setViewName("test4");
 - ViewResolver를 통한 JSP를 찾기 위해 View 이름을 지정

 

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>
	<h1>test4</h1>
	<h3>data1 : ${requestScope.data1 }</h2>
	<h3>data1 : ${requestScope.data2 }</h2>
</body>
</html>

결과 값

 

728x90
반응형