본문 바로가기
  • 실행력이 모든걸 결정한다
Spring Series/Spring Framework

[Spring] Controller에서 redirect하기

by 김코더 김주역 2021. 1. 5.
반응형

redirect

리다이렉트는 다른 페이지로 이동시켜주는 기능이다.

스프링의 컨트롤러에서 redirect할 경로를 지정해줄 수 있다.

 

이번 포스팅에서 설명할 Controller, View 파일 경로이다.

 

Controller method들끼리 home -> test1 -> test2 순서로 redirect를 진행할 것이다. 

 

 

<HomeController.java>

먼저 속성a에 속성값 97을 붙여 다음 컨트롤러 메소드인 test1로 redirect해주는 코드이다.

컨텍스트 경로(/demo) + redirect 경로(/test/test1) 로 요청을 돌려주게 된다.

 

package com.example.demo;

import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {		
		model.addAttribute("a", 97);		
		return "redirect:test/test1";
	}
}

 

 

<TestController.java>

redirect에 의해 요청은 test1 메소드로 매핑되었고, test1 메소드에서 다시 test2 메소드로 redirect하고자 한다.

home 메소드로부터 전송받은 a속성은 다시 model 객체에 담고 b속성을 새로 model 객체에 담아주는 모습이다.

그리고 부모 경로(/demo/test) + redirect 경로(/test2) 로 요청을 돌려주는 것이다.

 

test1 메소드에서의 redirect에 의해 최종적으로 요청은 test2 메소드로 매핑되었다.

test1 메소드로부터 전송받은 a, b속성은 ModelAndView 객체에 담고 c속성을 새로 ModelAndView 객체에 담아주고,

마지막으로 중간 주소("test/test2")를 설정 파일에 반환해주는 모습이다.

※ ModelAndView 객체로 setViewName() 메소드에 redirect: 경로를 지정하는 것도 가능하다.

package com.example.demo;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/test")
public class TestController {
	@RequestMapping("/test1")
	public String test1(HttpServletRequest request, Model model) {
		String a = request.getParameter("a");
		model.addAttribute("a", a);
		model.addAttribute("b", 98);
		return "redirect:test2";
	}
	
	@RequestMapping("/test2")
	public ModelAndView test2(HttpServletRequest request) {
		String a = request.getParameter("a");
		String b = request.getParameter("b");
		ModelAndView mav = new ModelAndView();
		mav.addObject("a", a);
		mav.addObject("b", b);
		mav.addObject("c", 99);
		mav.setViewName("test/test2");
		return mav;
	}
}

 

 

<test2.jsp>

direct에 의해 최종적으로 test2.jsp가 클라이언트에게 보여진다.

<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	안녕하세요 여기는 <b>test2.jsp</b>입니다. <br>
	a -> ${a} <br>
	b -> ${b} <br>
	c -> ${c}
</body>
</html>

 

 

실행 화면

속성 a, b, c가 모두 정상적으로 전송된 모습이다.

 

 

 

반응형

댓글