spring mvc๋ ๊ธฐ๋ณธ์ ์ผ๋ก mvcํจํด๊ณผ ๋์ผํ ์์ง์์ ๋ณด์ฌ์ค๋ค.
spring mvc๋ฅผ ์ฌ์ฉ์ ํ ๋ ค๋ฉด ํ์ฌ ํ๋ก์ ํธ์ spring webmvc-4.3.9.RELEASE.jar
ํ์ผ์ ๋ฃ์ด์ค์ผ์ง ์ฌ์ฉํ ์ ์๋ค!!!
ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ ์๋จ์์ ์๋ธ๋ฆฟ ํ๋๊ฐ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ฐ๋๋ค. ์์ฒญ์ ๋ฐ์ผ๋ฉด ๊ทธ๊ฒ์ ๋ง๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์์ ํธ์ถํ๋ค ๊ทธ๋ฆฌ๊ณ ํธ์ถ์ ๋ํ ๊ณตํต ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ก๊ณ , ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ์ธํ ๋๋จธ์ง ์ปจํธ๋กค๋ฌ๋ ์ด์ Servlet ํด๋์ค๊ฐ ์๋์ด๋ ์ฒ๋ฆฌํ๋๋ฐ ๋ฌธ์ ๊ฐ ์์ด์ง๋ค.
<!-- ์ฌ์ฉํ bean๊ฐ์ฒด ์ ์ -->
<bean id="t1" class="ex1.Test1Action" name="/t1.inc"/>
<!-- ๋ค์ name์ url mapping๋ช
์ด๋ค.
๋ธ๋ผ์ฐ์ ์์ ๋๋ฉ์ธ ๋ค์ /t1.inc๋ผ๊ณ ์์ฒญํ๋ฉด Test1Action์ด ๊ตฌ๋๋๋ค. -->
<bean id="t2" class="ex1.Test2Action" name="/t2.inc"/>
<!-- View Resolver์ค์ -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="suffix" value=".jsp"/><!-- ํ์ฅ์ ์ง์ -->
<property name="prefix" value="/WEB-INF/jsp/"/><!-- ์์น ์ง์ -->
</bean>
ย ย ย ์ด๋ ๊ฒ controller๋ฅผ DispatcherServlet ์์์ ๋ฐ์ ์์ฑ์ ํ๋ฉด ์๋ฒ๋ฅผ ์คํ์ ํ๋ฉด์
ย ย ย WEB-INF/Controller-servlet.xml ๋ฅผ ๋ก๋๋ฅผ ํ ๋ ค๊ณ ํ๋ค ์ฌ๊ธฐ์ ํ์ํ ๋น ๊ฐ์ฒด๋ค์ ๋ฑ๋ก์ ํด์ค์ผ ย ย ย ํ๊ณ name : URL Mapping๋ช
์ ์ง์ ์ ํด์ค์ผ ํ๋ค.
Action controller์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค ์ด ์ค 3๊ฐ์ง๋ง ์ ์ํด๋ณด์
public class Test1Action extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse reseponse) throws Exception {
// ํ์ฌ ๊ฒ์ฒด๋ Controller์ ์ํด์ ํธ์ถ๋๋ค.
// ๋จ, ํน์ ์ด๋ฆ์ผ๋ก ๋ฑ๋ก๋์ด ์์ด์ผ ํ๋ค!!(t1.inc)
// jsp์์ ํํํ ์์๋ค์ request์ ์ ์ฅํ์!
request.setAttribute("msg", "ํ์ํฉ๋๋ค.");
// ๋ฐํ๊ฐ์ฒด ์์ฑ
ModelAndView mv = new ModelAndView();
// forwardํ jsp ๊ฒฝ๋ก๋ฅผ mv์ ์ง์ ํด์ผ ํ๋ค.
mv.setViewName("ex1");
// mv์ ํ์ํ ์ ๋ณด ์ ์ฅ
mv.addObject("str", "1000");
return mv;
}
}
ย ย ย Action ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋๋ AbstractController ๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์์ ๋ฐ๋๋ค
ย ย ์ฌ๊ธฐ์๋ request๋ก forward๋์ jsp์์ ๋ฐ์ดํฐ๋ฅผ ํํํด์ ๋ณด์ฌ์ค๋ค.
ย ย ํ์ง๋ง ์ฌ๊ธฐ์๋ ModelAndView๋ผ๋ ๊ฐ์ฒด๊ฐ request๋ก forward๋์ ๋์ด๊ฐ๊ธฐ ๋๋ฌธ์
ย ย ModelAndView ๊ณณ์ ์ ๋ณด๋ค์ ๋ด์์ ๋ณด๋ด์ฃผ๋ฉด ๋๋ค.
public class Test3Action implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// ๋จผ์ ํ์ฌ ๋ ์ง๋ฅผ ๊ตฌํ๋ค.
Date now = new Date(System.currentTimeMillis());
// ๋ฐํ ๊ฐ์ฒด ์์ฑ
ModelAndView mv = new ModelAndView();
mv.addObject("now", now.toString());
mv.setViewName("ex3");
return mv;
}
}
ย ย ย AbstractController ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ ์์ง์์ ๋ณด์ฌ์ค๋ค.
ย ย ย ๋จ ์์์ ๋ฐ์ ์ ์ํ๋์ง ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋์ง์ ์ฐจ์ด์ ๋ฟ ์ด๋ค.
ย ย ย ์์ 2๊ฐ์ Action Controller๋ ํ๊ฐ์ ์์ฒญ๋ง ์ฒ๋ฆฌํ ์๊ฐ ์๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด
ย ย ย ๋๋ฌด ๋ง์ Action Controller๊ฐ์ฒด๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ํ ํด๋์ค์์ ์ฌ๋ฌ๊ฐ์ง์
ย ย ย ย ์์ฒญ์ ๋ฐ์ ์ํ์ ํ ๋ ค๋ฉด Annotation์ ์ ์ํด์ ์ฌ์ฉํ๋ฉด ํ ํด๋์ค์์
ย ย ย ย ์ฌ๋ฌ๊ฐ์ง์ ๊ฐ์ฒด๋ค๋ก ์ํ๋ ๊ฐ๋ค์ forward๊ฐ ๊ฐ๋ฅํ๋ค!!๐ฅ๐ฅ๐ฅ๐ฅ
ย ย ย ์ปจํธ๋กค๋ฌ ํด๋์ค์ @Controller ์ด๋ ธํ ์ด์ ์ ์์ฑํฉ๋๋ค. ํด๋น ์ด๋ ธํ ์ด์ ์ด ์ ์ฉ๋ ํด๋์ค๋ ย ย ย "Controller"์์ ๋ํ๋๊ณ , bean์ผ๋ก ๋ฑ๋ก๋๋ฉฐ ํด๋น ํด๋์ค๊ฐ Controller๋ก ์ฌ์ฉ๋จ์ Spring ย ย ย Framework์ ์๋ฆฝ๋๋ค.
ย ย ย ํด๋น ์ด๋ ธํ ์ด์ ์ด ์ ์ธ๋ ํด๋์ค์ ๋ชจ๋ ๋ฉ์๋๊ฐ ํ๋์ ์์ฒญ์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ค. ย ย ย ์๋ฅผ๋ค์ด, "/student" ์์ฒญ์ ๋ํด ๊ณตํต์ ์ผ๋ก ์ฒ๋ฆฌํด์ผ๋ ํด๋์ค๋ผ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ํ, ์์ฒญ ย ย ย url์ ๋ํด ํด๋น ๋ฉ์๋์์ ์ฒ๋ฆฌํด์ผ ๋๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ @RequestMapping์ ๋ํ ย ย ย ๋ชจ๋ ๋งคํ ์ ๋ณด๋ Spring์์ ์ ๊ณตํ๋ HandlerMapping Class๊ฐ ๊ฐ์ง๊ณ ์์ต๋๋ค.