-
Spring MVC - JSP에 데이터 전달Spring/Spring MVC 2021. 12. 26. 17:26728x90반응형
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 객체 사용
ModelAndView는 Model에 값을 저장하는 기능과 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반응형'Spring > Spring MVC' 카테고리의 다른 글
Spring MVC - 폼 커스텀 태그(Form Custom Tag) (0) 2021.12.26 Spring MVC - 커맨드 객체(Command Object) (0) 2021.12.26 Spring MVC - @ModelAttribute : 객체로 쿼리 파라미터 바인딩 (0) 2021.12.26 Spring MVC - 쿼리 파라미터(Parameter) 전달(요청 파라미터 주입받기) (0) 2021.12.25 Spring MVC - URL Mapping(요청 매핑) - @RequestMapping @GetMapping @PostMapping (0) 2021.12.25