ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring MVC - JSP에 데이터 전달
    Spring/Spring MVC 2021. 12. 26. 17:26
    반응형

    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>

    결과 값

     

    반응형

    댓글

Designed by Tistory.