์ ์ , ๋์ , @Controller, @RequestMapping
Spring์์ ์ ์ ๋ฐ ๋์ ํ์ด์ง ๋ฐํํ๊ธฐ
Spring์ Model-View-Controller(MVC) ํจํด์ ํ์ฉํ์ฌ, ์ ์ ํ์ด์ง์ ๋์ ํ์ด์ง๋ฅผ ์ด๋ป๊ฒ ๋ฐํํ๋์ง ์์๋ณด์.
1. ์ ์ ํ์ด์ง ๋ฐํ: ๊ธฐ๋ณธ ์๋ฌ ํ์ด์ง ์ฒ๋ฆฌ
Spring์ ๊ธฐ๋ณธ์ ์ผ๋ก ErrorController๋ฅผ ํตํด ์ ์ ์๋ฌํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ด๋ ํน์ ์ํ์ฝ๋(404, 500 ๋ฑ)์ ๋ฐ๋ผ ์ ์ HTMLํ์ผ์ ๋ฐํํ ์ ์๋ค. BasicErrorController๋ผ๋ Spring์ ๊ธฐ๋ณธ ๊ตฌํ์ฒด๋ฅผ ํตํด, ์ฌ์ฉ์ ์ ์ Controller ์์ด๋ ์ ์ ์๋ฌํ์ด์ง๋ฅผ ์ฒ๋ฆฌํ . ์์๋ค.
@Controller
public class CustomErrorController implements ErrorController {
@RequestMapping("/error")
public String handleError(HttpServletRequest request) {
return "error"; // ์ ์ HTML ์๋ฌ ํ์ด์ง ๋ฐํ
}
}
2. ๋์ ํ์ด์ง ๋ฐํ: ModelAndView ์ฌ์ฉ
์ ์ ํ์ด์ง ๋ฐํ๊ณผ ๋ฌ๋ฆฌ, ๋์ ํ์ด์ง๋ ModelAndView ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์ํ ์ฝ๋๋ ์๋ฌ ๋ฉ์ธ์ง์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋์ ์ผ๋ก ํ์ด์ง์ ํฌํจ์ํฌ ์ ์๋ค. ์ด๋ ํ์ด์ง๋ฅผ ๋ ๋๋งํ ๋ ์ํฉ์ ๋ฐ๋ผ ๋ชจ๋ธ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ์ฌ ๋ ์ ์ฐํ ์๋ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
@Controller // ํด๋น ํด๋์ค๊ฐ Spring MVC์ ์ปจํธ๋กค๋ฌ ์ญํ ์ ์ํํจ์ ๋ํ๋ธ๋ค.
public class CustomErrorController implements ErrorController {
// GET์์ฒญ์ผ๋ก /error ๊ฒฝ๋ก๋ก ๋ค์ด์จ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋
@RequestMapping(value = "/error", method = RequestMethod.GET)
public ModelAndView handleError(HttpServletRequest request) {
// ModelAandVieww ๊ฐ์ฒด ์์ฑ, View์ Model ๋ฐ์ดํฐ๋ฅผ ํจ๊ป ๋ฐํํ ์ ์์.
ModelAndView modelAndView = new ModelAndView();
// ์๋ฌ ์ํ ์ฝ๋๋ฅผ RequestDispatcher์์ ๊ฐ์ ธ์จ๋ค.
Object status = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE);
// ์ํ ์ฝ๋๊ฐ null์ด ์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ
if (status != null) {
// ์ํ ์ฝ๋๋ฅผ Integer๋ก ๋ฐํ
Integer statusCode = Integer.valueOf(status.toString());
// ์ํ ์ฝ๋๊ฐ 404 (NOT_FOUND)์ธ ๊ฒฝ์ฐ
if (statusCode == HttpStatus.NOT_FOUND.value()) {
// Model์ ์ํ ์ฝ๋ ์ถ๊ฐ
modelAndView.addObject("status", statusCode);
// Model์ ์๋ฌ ์ด์ (Not Found) ์ถ๊ฐ
modelAndView.addObject("reason", HttpStatus.NOT_FOUND.getReasonPhrase());
// ์ํ ์ฝ๋๊ฐ 500 (INTERNAL_SERVER_ERROR)์ธ ๊ฒฝ์ฐ
} else if (statusCode == HttpStatus.INTERNAL_SERVER_ERROR.value()) {
// Model์ ์ํ์ฝ๋ ์ถ๊ฐ
modelAndView.addObject("status", statusCode);
// Model์ ์๋ฌ ์ด์ (Internal Server Error) ์ถ๊ฐ
modelAndView.addObject("reason", HttpStatus.INTERNAL_SERVER_ERROR.getReasonPhrase());
}
}
// ๋ฐํํ View์ ์ด๋ฆ์ "error"๋ก ์ค์ , /resources/templates/error.html ํ์ผ์ ์ฐพ์
modelAndView.setViewName("error");
// ModelAndView ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ฌ View์ Model ๋ฐ์ดํฐ๋ฅด ํจ๊ป ์ ๋ฌ
return modelAndView;
}
}
3. ์น ํ์ด์ง ๋ฐํ: @Controller์ @RequestMapping
Spring์์ ์นํ์ด์ง ๋ฐํ์ @Controller์ @RequestMapping์ ํตํด ๊ตฌํ๋๋ค. ์ด๋ ์์ฒญ URL์ ๋ฐ๋ผ ํน์ HTML ํ์ผ์ ๋ฐํํ๋๋ก ์ค์ ํ ์ ์์ผ๋ฉฐ, ๋ฐํํ๋ ๋ฌธ์์ด์ ViewTemplate์ ์ง์ ํ๋ค.
@Controller
public class IndexController {
@RequestMapping(method = RequestMethod.GET, value = "/")
public String index() {
return "index"; // ๋ฐํํ ViewTemplate ์ง์
}
}
- ํด๋น ์ฝ๋๋ฅผ ํตํด / ๊ฒฝ๋ก๋ก ๋ค์ด์ค๋ GET ์์ฒญ์ ๋ํด /resources/templates/index.html ํ์ผ์ด ๋ฐํ๋๋ค.
4. @RequestMapping๊ณผ ViewTemplate ์ฒ๋ฆฌ
@RequestMapping์ ํตํด HTTP๋ฉ์๋(GET,POST)์ URL ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๊ณ , ์์ฒญ์ด ๋ค์ด์ฌ ๋ ์ด๋ค ๋ฉ์๋๊ฐ ์คํ๋ ์ง๋ฅผ ์ ์ํ๋ค.
๋ฐํํ๋ ๋ฌธ์์ด์ Thymeleaft๋ฅผ ์ด์ฉํ์ฌ ViewTemplate์ผ๋ก ํด์๋๋ฉฐ, ์ง์ ๋ ๊ฒฝ๋ก์ HTML ํ์ผ์ ๋ฐํํ๋ค.
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
return "indext"; // index.html ๋ฐํ
}
- ์ด ๊ฒฝ์ฐ Spring์ Thymeleaf๋ฅผ ํตํด /resources/templates/index.html ํ์ผ์ ์ฐพ์ ๋ฐํํ๋ค.
โน๏ธ์ฐธ๊ณ
[ASAC 6๊ธฐ ๊ฐ์์๋ฃ]
'๐ปDEV-STUDY > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Bean ์๋ฆฌ๊ณผ ์์กด์ฑ ์ฃผ์ (1) | 2024.10.06 |
---|---|
[Spring]HttpMessageConverter (0) | 2024.10.06 |
[Spring] Controller ์ฒ๋ฆฌ ๋ฐํ (1) | 2024.10.05 |
[Spring] Spring Controller์ ๊ธฐ๋ณธ ๋์ (0) | 2024.10.04 |
[Spring] Spring MVC ์๋ฆฌ (0) | 2024.10.04 |