[Spring Web MVC] 컨트롤러 클래스, 뷰 구현
1. 컨트롤러 클래스
HomeController.java
import org.springframework.streotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/")
public String index(Model model) {
model.addAttribute("message", "좋은 아침!");
return "index";
}
}
컨트롤러 클래스는 웹 브라우저의 URL 요청을 받아서, 웹 서버에서 실행되는 자바 클래스이다. 웹 브라우저가 웹서버에 어떤 URL을 요청을 하면 그 URL에 해당하는 컨트롤러의 메소드가 자동으로 호출되어 실행된다.
@Controller 어노테이션
컨트롤러 클래스에 이 어노테이션(Annotation)을 붙여줘야 한다.
액션 메서드
웹 브라우저가 어떤 URL을 웹서버에 요청하면, 그 요청된 URL에 해당하는 컨트롤러의 어떤 메서드가 자동으로 호출된다. 웹 브라우저의 요청에 의해서 자동으로 호출되는 컨트롤러의 메서드를 액션메서드라 한다.
@RequestMapping 어노테이션
액션 메서드에 붙은 @RequestMapping("/") 어노테이션의 "/" 부분은 그 액션 메서드를 호출하기 위한 URL이다. 자동으로 호출할 액션 메서드를 찾을 때 컨트롤러 클래스의 이름이나 액션 메서드의 이름은 상관없고 @RequestMapping 어노테이션에 등록되어 있는 URL만 일치하면 된다.
컨트롤러 액션 메서드의 리턴값
컨트롤러의 액션 메서드는 문자열을 리턴한다. 컨트롤러의 액션 메서드가 리턴하는 문자열은 View 파일의 이름이다. 컨트롤러의 액션 메서드가 리턴된 후, 뷰 파일이 실행된다. 액션 메서드가 리턴한 이름의 뷰 파일이 실행된다.
Model 객체
public String index(Model model)
컨트롤러의 액션 메서드는 Spring Web MVC 엔진에 의해 호출된다. 대부분의 액션 메서드의 파라미터에 Model model 객체가 포함된다. 컨트롤러의 액션 메서드가 뷰 파일에 전달할 데이터를 Model 객체에 넣어 전달한다. 즉, Model 객체는 데이터를 전달하는 객체라고 보면 된다.
model의 attribute
model.addAttribute("message", "좋은 아침!");
뷰 파일에 전달할 데이터를 Model 객체에 넣는 코드이다. 전달되는 데이터의 이름은 "message"이고 값은 "좋은 아침!" 문자열이다. 이렇게 모델에 담겨서 뷰에 전달되는 데이터는 model attribute라고 한다.
뷰에서 model attribute를 출력하는 코드는
${message}
위와 같다. model attribute 이름이 정확히 일치해야 한다.
2. 뷰 (view)
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>안녕하세요</h1>
<h3>${ message }</h3>
</body>
</html>
웹 브라우저의 요청(http request)에 대한 응답(http response)으로, 웹 서버에서 웹 브라우저로 전송되는 것들은 http 태그가 대부분이다.
실행 순서
웹 브라우저에서 웹 서버에 요청(http request)이 전달되면, 요청된 URL과 일치하는 컨트롤러의 액션 메서드가 실행된다. 그리고 액션 메서드의 뒤를 이어서 뷰(view) 파일이 실행된다. 뷰 파일의 실행 결과, 출력된 html 태그들이 웹 브라우저로 전송된다.
'web > Spring' 카테고리의 다른 글
[Spring Mybatis] DB 조회, 수정, 삽입, 삭제 기능 구현 (0) | 2021.11.26 |
---|---|
[JSP] formatNumber, formatDate 확장 태그 (2) | 2021.11.25 |
[Spring] 의존성 주입 애노테이션 @Autowired @Resource @Inject (0) | 2021.11.22 |
[Spring JPA] QueryDsl와 Gradle 그리고 AnnotationProcessor (4) | 2021.02.19 |
[Spring JPA/Rest API/AWS] 1. Spring Boot 프로젝트 생성 및 설정 (2) | 2020.05.09 |
댓글 개