๋ฐ์ํ
FrontController
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ์๋ธ๋ฆฟ ํ๋๊ฐ ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๊ณ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ์์ฒญ์ ๋ง๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์์ ํธ์ถํด์ฃผ๋ ํ์. ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ปจํธ๋กค๋ฌ๋ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
ํธ๋ค๋ฌ
์ปจํธ๋กค๋ฌ์ ์ด๋ฆ์ ๋ ๋์ ๋ฒ์์ธ ํธ๋ค๋ฌ๋ก ๋ณ๊ฒฝํ๋ค.
ํธ๋ค๋ฌ ์ด๋ํฐ
๋ค์ํ ์ข ๋ฅ์ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ด๋ํฐ
public interface MyHandlerAdapter {
boolean supports(Object handler); // ์ด๋ํฐ๊ฐ ํด๋น ์ปจํธ๋กค๋ฌ(ํธ๋ค๋ฌ)๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ํ๋จ
ModelView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, IOException; // ์ด๋ํฐ๊ฐ ์ค์ ์ปจํธ๋กค๋ฌ๋ฅผ ํธ์ถ
}
request.getRequestURI();
๋ก ์์ฒญ ์ ๋ณด๋ฅผ ์์๋ด๊ณ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ํธ๋ค๋ฌ๋ฅผ ์ฐพ์๋ธ๋ค.- ์ด๋ํฐ ๋ชฉ๋ก์ ๋๋ฉด์ ํธ๋ค๋ฌ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ์ด๋ํฐ๋ฅผ ์กฐํํ๋ค.
- ์ด๋ํฐ๋ฅผ ํธ์ถํ๋ค.
DispatcherServlet
์คํ๋ง MVC๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ผ๋ก ๊ตฌํ๋์ด ์๋ค.
DispatcherServlet
๋ ๋ถ๋ชจ ํด๋์ค์์ HttpServlet๋ฅผ ์์๋ฐ์์ ์ฌ์ฉํ๊ณ ์๋ธ๋ฆฟ์ผ๋ก ๋์ํ๋ค- ์คํ๋ง ๋ถํธ๋
DispatcherServlet
๋ฅผ ์๋ธ๋ฆฟ์ผ๋ก ๋ฑ๋กํ๋ฉด์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด ๋งคํํ๋ค- ์์ธํ ๊ฒฝ๋ก์ ์๋ธ๋ฆฟ์ด ์ฐ์ ์์๊ฐ ๋ ๋๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด์ ๋ฑ๋กํ ์๋ธ๋ฆฟ๋ ๊ฐ์ด ๋์ํ๋ค
DispacherServlet.doDispatch() ๋์ ์์
- ํธ๋ค๋ฌ ์กฐํ: ํธ๋ค๋ฌ ๋งคํ์ ํตํด ์์ฒญ URL์ ๋งคํ๋ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๋ฅผ ์กฐํํ๋ค.
- HandlerMapping
0 = RequestMappingHandlerMapping
: ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping์์ ์ฌ์ฉ1 = BeanNameUrlHandlerMapping
: ์คํ๋ง ๋น์ ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
- HandlerMapping
- ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ: ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์กฐํํ๋ค.
- HandlerAdapter
0 = RequestMappingHandlerAdapter
: ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping์์ ์ฌ์ฉ1 = HttpRequestHandlerAdapter
: HttpRequestHandler ์ฒ๋ฆฌ2 = SimpleControllerHandlerAdapter
: Controller ์ธํฐํ์ด์ค(์ ๋ ธํ ์ด์ X, ๊ณผ๊ฑฐ์ ์ฌ์ฉ)์ฒ๋ฆฌ
- HandlerAdapter
- ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ: ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์คํํ๋ค.
- ํธ๋ค๋ฌ ์คํ: ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ค์ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ค.
- ModelAndView ๋ฐํ: ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํธ๋ค๋ฌ๊ฐ ๋ฐํํ๋ ์ ๋ณด๋ฅผ ModelAndView๋ก ๋ณํํด์ ๋ฐํํ๋ค.
- viewResolver ํธ์ถ: ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ฐพ๊ณ ์คํํ๋ค.
- JSP์ ๊ฒฝ์ฐ: InternalResourceViewResolver ๊ฐ ์๋ ๋ฑ๋ก๋๊ณ , ์ฌ์ฉ๋๋ค. ์ด๋
application.properties
์ ๋ฑ๋กํspring.mvc.view.prefix
,spring.mvc.view.suffix
์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํด์ ๋ฑ๋กํ๋ค. 1 = BeanNameViewResolver
: ๋น ์ด๋ฆ์ผ๋ก ๋ทฐ๋ฅผ ์ฐพ์์ ๋ฐํํ๋ค. (์: ์์ ํ์ผ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉ)2 = InternalResourceViewResolver
: JSP๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ทฐ๋ฅผ ๋ฐํํ๋ค.
- JSP์ ๊ฒฝ์ฐ: InternalResourceViewResolver ๊ฐ ์๋ ๋ฑ๋ก๋๊ณ , ์ฌ์ฉ๋๋ค. ์ด๋
- View ๋ฐํ: ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ๋ทฐ์ ๋
ผ๋ฆฌ ์ด๋ฆ์ ๋ฌผ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ณ , ๋ ๋๋ง ์ญํ ์ ๋ด๋นํ๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
- JSP์ ๊ฒฝ์ฐ InternalResourceView(JstlView) ๋ฅผ ๋ฐํํ๋๋ฐ, ๋ด๋ถ์ forward() ๋ก์ง์ด ์๋ค.
- ๋ทฐ ๋ ๋๋ง: ๋ทฐ๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ๋ ๋๋ง ํ๋ค.
๐ Reference
๋ฐ์ํ