시뻘건 개발 도전기

#8 : Controller 본문

Framework/spring

#8 : Controller

시뻘건볼때기 2020. 5. 5. 14:36
반응형

  Client의 요청이 들어오게되면 Controller에서 가장 먼저 로직이 실행되게 된다. 컨트롤러 작업이 마췬 뒤, 컨트롤러의 return된 view 페이지로 데이터가 전달됩니다. 기본 생성되는 컨트롤러를 살펴보자.

@Controller
public class HomeController {
	
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		logger.info("Welcome home! The client locale is {}.", locale);
		
		Date date = new Date();
		DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
		
		String formattedDate = dateFormat.format(date);
		
		model.addAttribute("serverTime", formattedDate );
		
		return "home";
	}
	
}

 

  가장 먼저 해당 클래스가 컨트롤러임을 정의하는 @Controller 어노테이션이 있다. 컨트롤러를 찾았다면 스프링은 다음으로 해당 클래스에서 @RequestMapping 어노테이션을 찾는다. 해당 어노테이션의 옵션으로 value는 요청 URI를 가르키고 method는 요청 메소드를 이야기한다. 즉, "GET으로 URI가 /로 요청이 오면 home() 메소드를 실행하겠다."가 된다. 해당 메소드는 "home"을 리턴하고 있는데 이것이 바로 view의 파일명이 된다. 즉, home.jsp가 될 것이다.(설정에 따라 확장자가 다를 수 있다.) 

  그렇다면 view에 데이터를 줄 때는 어떻게 할까? 그럴땐 매개변수인 model을 사용한다. org.springframework.ui.Model은 컨트롤러에서 뷰로 데이터를 전달할 때 사용하는 녀석이다. 기본 컨트롤러에서 보면 serverTime이라고하는 데이터를 현재 시간을 담아 전달하고 있는 것을 볼 수 있다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<meta charset="UTF-8">
	<title>Home</title>
</head>
<body>
<h1>
	Hello world!!!!
</h1>

<P>  The time on the server is ${serverTime}. </P>
</body>
</html>

 

그래서 home.jsp를 보면 ${}로 감싸서 serverTime을 사용한 것을 볼 수 있다. 컨트롤러의 리턴 값이 어떻게 view 파일을 찾아갈 수 있는지에 대해서는 이전 글을 다시 살펴보자.

 

#7 : MVC (Model View Controlle

MVC 기반의 spring project를 생성하면 기본적으로 다음과 같은 디렉토리 구조를 볼 수 있다. 가장 먼저 servlet-context.xml에 대해 알아보자. 대체적으로 spring container 설정을하는 파일이다. <annotation-..< p=""> </annotation-..<>

dotori.ga

 

 

  파라미터에서 Model을 받지 않는 방법도 있다. 다음을 살펴보자.

org.springframework.web.servlet.ModelAndView를 생성하여 해당 객체에 데이터와 view를 함께 설정하여 리턴하고 있다. 이 방법이 상위에 소개했던 내용보다 더 많이 사용되고 있는 것 같다. (실제로 spring 프로젝트 진행할 때 아래와 같은 방법을 사용하였음) 

@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView home() {
	ModelAndView model = new ModelAndView();
	
	Date date = new Date();
	DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, new Locale("kr"));
	
	String formattedDate = dateFormat.format(date);
	model.addObject("serverTime", formattedDate );
	
	model.setViewName("home");
	
	return model;
}

 

  class에 @RequestMapping 어노테이션을 주는 방법도 있다.

@Controller
@RequestMapping("/home")
public class HomeController {
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	public String home() {
		
		return "/home/login";
	}
}
반응형
Comments