일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 애자일프로그래밍
- 읽기쉬운코드
- 알고리즘
- Baekjoon
- 클린코드
- 개발
- 프레임워크
- cleancode
- spring boot
- Java
- 엘라스틱서치
- 백준
- database
- Spring
- 코딩테스트
- 개발자
- 데이터베이스
- framework
- 스프링
- Elasticsearch
- 애자일기법
- API
- 자바
- 코드
- 애자일
- 그리디
- 코딩
- JPA
- 그리디알고리즘
- ES
- Today
- Total
튼튼발자 개발 성장기🏋️
#8 : Controller 본문
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 파일을 찾아갈 수 있는지에 대해서는 이전 글을 다시 살펴보자.
파라미터에서 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";
}
}
'Framework > spring' 카테고리의 다른 글
#10 : redirect [필요하면 리다이렉트 시키자.] (0) | 2020.05.07 |
---|---|
#9 : Client의 데이터 가져오기! (0) | 2020.05.06 |
#7 : MVC (Model View Controlle (0) | 2020.05.04 |
#6 : AOP (Aspect Oriented Programming) (0) | 2020.05.03 |
#5 : bean setting (0) | 2020.05.02 |