๋ฐ์ํ
[๐คModel] HelloController.java
package xyz.itwill10.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
//@Controller : ์์ฒญ ์ฒ๋ฆฌ ํด๋์ค๋ฅผ Spring Bean์ผ๋ก ๋ฑ๋กํ๊ธฐ ์ํ ์ด๋
ธํ
์ด์
// => ํด๋์ค์ ์ด๋ฆ์ Spring Bean์ ์๋ณ์(beanName)๋ก ์๋ ์ค์ - ์ฒซ๋ฌธ์๋ ์๋ฌธ์๋ก ๋ณํ
// => value ์์ฑ์ ์ฌ์ฉํ์ฌ Spring Bean์ ์๋ณ์(beanName) ๋ณ๊ฒฝ ๊ฐ๋ฅ
// => Controller ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ์ง ์์๋ ์์ฒญ ์ฒ๋ฆฌ ํด๋์ค๋ก ์ฒ๋ฆฌ
// => @RequestMapping ์ด๋
ธํ
์ด์
์ผ๋ก ๋ค์์ ์์ฒญ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ ๊ฐ๋ฅ
// => ์ฆ command Pattern(ํ๋์ ์์ฒญ์ ๋ํด ํ๋์ ์ฒ๋ฆฌ)์ด ์๋
// => ์์ฒญ์ฒ๋ฆฌ๋ฉ์๋ (handleRequest(request, response))๊ฐ ๋ฐ๋ก ์กด์ฌํ์ง ์์
@Controller
public class HelloController { //๋ชจ๋ธ(Model) ์ญํ ์ ์ ๊ณตํ๋ ํด๋์ค - ์์ฒญ ์ฒ๋ฆฌ ํด๋์ค
private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
//์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋๋ Front Controller์๊ฒ ๋ฐ๋์ ๋ทฐ์ด๋ฆ(ViewName) ์ ๊ณต
// => Front Controller๋ ์ ๊ณต๋ฐ์ ๋ทฐ์ด๋ฆ์ ์ด์ฉํ์ฌ ์๋ต๊ด๋ จ ์ ๋ณด๋ก ๋ณํ(ViewResolver)ํ์ฌ ์๋ต ์ฒ๋ฆฌ
//๐คFront Controller์ ์ํด JSP ๋ฌธ์๋ก ํฌ์๋ ์ด๋ํ์ฌ ์๋ต๋๋๋ก ๋ทฐ์ด๋ฆ์ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ
// => JSP ๋ฌธ์๋ก ์๋ต ์ฒ๋ฆฌ ํ์ง ์์ ๊ฒฝ์ฐ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ ๋ฐํํ์ Model ๋๋ Map์ผ๋ก ์ค์ ๊ฐ๋ฅ
// => ex)REST ํ๋ก๊ทธ๋จ์์ JSP ๋ฌธ์๋ก ์๋ตํ์ง ์์ ๋
// => JSP ๋ฌธ์๋ก ์๋ต ์ฒ๋ฆฌํ ๊ฒฝ์ฐ๋ ๋ฉ์๋์ ๋ฐํํ์ Model ๋๋ Map์ผ๋ก ์ค์ ํ๋ฉด ์๋จ
//1. ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ [๋ฐํํ์ void]๋ก ์ค์ ํ ๊ฒฝ์ฐ Front Controller์๊ฒ ๋ฉ์๋์ ์ด๋ฆ์ ๋ทฐ์ด๋ฆ(ViewName)์ผ๋ก ์ ๊ณต
//2. ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ [๋ฐํํ์ String]์ผ๋ก ์ค์ ํ ๊ฒฝ์ฐ Front Controller์๊ฒ ๋ฐํ๊ฐ์ ๋ทฐ์ด๋ฆ(ViewName)์ผ๋ก ์ ๊ณต - ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
//3. ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ [๋ฐํํ์ ModelAndView]๋ก ์ค์ ํ ๊ฒฝ์ฐ Front Controller์๊ฒ ๋ฐํ๋๋ ModelAndView ๊ฐ์ฒด์ ๋ทฐ์ด๋ฆ(ViewName)์ ์ ์ฅํ์ฌ ์ ๊ณต
//๐ค@RequestMapping : ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ์ ์ธํ๊ธฐ ์ํ ์ด๋
ธํ
์ด์
// => ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ "๋ชจ๋ ์์ฒญ๋ฐฉ์"(Method - GET, POST, PUT, PATCH, DELETE ๋ฑ)์ ์ํด ํธ์ถ๋๋ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋๋ฅผ ์์ฑํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ์ด๋
ธํ
์ด์
// => ํด๋ผ์ด์ธํธ์ ์์ฒญ๋ฐฉ์์ ๊ตฌ๋ถํ์ฌ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋๊ฐ ํธ์ถ๋๋๋ก ์ฒ๋ฆฌํ๊ณ ์ ํ ๊ฒฝ์ฐ
// => @GetMapping , @PostMapping,[@PutMapping, @PatchMapping, @DeleteMapping - REST์๋น์ค ๋ง๋ค ๋] ๋ฑ์ ์ด๋
ธํ
์ด์
์ฌ์ฉ ๊ฐ๋ฅ
//๐ค์ผ๋ฐ์ ์ธ ์น ํ๋ก๊ทธ๋จ - @RequestMapping์ด ํจ์จ์
//๐คREST ํ๋ก๊ทธ๋จ - ์์ฒญ๋ฐฉ์์ ๊ตฌ๋ถํ์ฌ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋๊ฐ ํธ์ถ๋๋๋กํ๋ ์ด๋
ธํ
์ด์
์ด ํจ์จ์
// value ์์ฑ : ํด๋ผ์ด์ธํธ์ ์์ฒญ URL ์ฃผ์๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ค์
// => Front Controller์ ์ํด ๋ฑ๋ก๋ ํด๋ผ์ด์ธํธ ์์ฒญ URL ์ฃผ์(์๋ณ์)๋ก ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋๊ฐ ์๋ ํธ์ถ๋์ด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํจ
// => ๋ด๋ถ์ ์ผ๋ก HandlerMapping๋์ด ์๋ ๋ฑ๋ก๋จ - ๋ค๋ฅธ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์์ฑ๊ฐ๋ง ์ค์ ๊ฐ๋ฅ
// => ๋ค๋ฅธ ์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋์ value ์์ฑ๊ฐ๊ณผ ์์ฒญ URL ์ฃผ์๊ฐ ์ค๋ณต๋ ๊ฒฝ์ฐ WAS ์คํ ์ ์๋ฌ ๋ฐ์
[๋ฐฉ๋ฒ1] ๋ฐํํ void
//@GetMapping(value = "/hello") //๋ฌด์กฐ๊ฑด GET ๋ฐฉ์์ ์์ฒญ๋ง ๊ฐ๋ฅ
@RequestMapping(value = "/hello") //ํด๋ผ์ด์ธํธ๊ฐ ์ต์์ ํด๋์ ์๋ hello๋ผ๋ ์นํ๋ก๊ทธ๋จ์ ์์ฒญํ๋ค๋ฉด?
public void hello() {//์์ฒญ ์ฒ๋ฆฌ ๋ฉ์๋
//์์ฒญ ์ฒ๋ฆฌ ๋ช
๋ น ์์ฑ - Service ๊ฐ์ฒด์ ๋ฉ์๋ ํธ์ถ
logger.info("[/hello] ํ์ด์ง ์์ฒญ : HelloController ํด๋์ค์ hello() ๋ฉ์๋ ํธ์ถ");
}
[๋ฐฉ๋ฒ2] ๋ฐํํ String - ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ
//ํด๋ผ์ด์ธํธ๊ฐ ์ต์์ ํด๋์ ์๋ hellViewName๋ผ๋ ์นํ๋ก๊ทธ๋จ์ ์์ฒญ!
@RequestMapping(value = "/helloViewName")
public String helloViewName() {
logger.info("[/helloViewName] ํ์ด์ง ์์ฒญ : HelloController ํด๋์ค์ helloViewName() ๋ฉ์๋ ํธ์ถ");
return "hello";
}
[๋ฐฉ๋ฒ3] ๋ฐํํ ModelAndView
//ํด๋ผ์ด์ธํธ๊ฐ ์ต์์ ํด๋์ ์๋ helloModelAndView๋ผ๋ ์นํ๋ก๊ทธ๋จ์ ์์ฒญ!
@RequestMapping(value = "/helloModelAndView")
public ModelAndView helloModelAndView() {
logger.info("[/helloModelAndView] ํ์ด์ง ์์ฒญ : HelloController ํด๋์ค์ helloModelAndView() ๋ฉ์๋ ํธ์ถ");
//ModelAndView ๊ฐ์ฒด : ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์์ฑ๊ฐ์ผ๋ก ์ ์ฅํ๊ณ ๋ทฐ์ด๋ฆ์ ์ ์ฅํ๊ธฐ ์ํ ๊ฐ์ฒด
//ModelAndView modelAndView = new ModelAndView();
//modelAndView.setViewName("hello"); //Setter ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋ทฐ์ด๋ฆ(ViewName) ๋ณ๊ฒฝ
ModelAndView modelAndView = new ModelAndView("hello"); //์์ฑ์๋ฅผ ์ด์ฉํ์ฌ ๋ทฐ์ด๋ฆ(ViewName) ๋ณ๊ฒฝ
return modelAndView;
}
}
hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>hello, Spring!!!</h1>
<hr>
</body>
</html>
๋ฐ์ํ