스프링(Spring) 웹 프로그래밍 설계 모델
(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)
Model1
JSP, Service, DAO를 하나의 파일로 처리하는 방식으로, 하나의 파일에서 모든 개발이 이루어지므로 개발 속도가 빠르지만 유지보수가 어렵다.
Model2
Controller, Service, DAO, View로 각각의 기능을 모듈화 하는 MVC 방식으로, 스프링에서 사용하는 방식이다. 특정 파일만 수정하면 되므로 유지보수가 수월하다.
스프링 MVC 프레임워크 설계구조
- HandlerMapping : 적합한 Controller를 선택
- HandlerAdapter : 해당하는 Controller 내에서 가장 적합한 메소드를 선택
- ViewResolver : 가장 적합한 JSP 파일 선택
DispatcherServlet 설정
JSP 웹 설정파일인 web.xml에 사용자의 모든 요청을 받기 위해 root를 의미하는 / 로 url을 매핑한다. 스프링 설정파일을 설정하면 스프링 컨테이너가 만들어지는데, 스프링 컨테이너에 HandlerMapping, HandlerAdapter, ViewResolver가 자동으로 생성되므로 개발자는 Controller와 View만 작업해주면 된다. (스프링 설정 파일을 설정하지 않으면 자동으로 설정해줌)
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
|
cs |
Controller 객체 - @Controller
스프링 설정 파일에 <annotation-driven /> 태그를 넣어주면 스프링 컨테이너를 사용하기 위한 여러 기능을 하는 클래스들이 빈(Bean) 객체로 스프링 설정 파일에 존재하게 된다. 컨트롤러로 사용할 클래스 이름 앞에 @Controller 어노테이션을 명시해준다.
servlet-context.xml
<annotation-driven />
|
cs |
HomeController.java
@Controller
public class HomeController {
}
|
cs |
Controller 객체 - @RequestMapping
설정한 URL로 매핑이 되도록 한다.
@RequestMappint("/success")
public String success(Model model) {
return "success";
}
|
cs |
Controller 객체 - Model 타입의 파라미터
개발자는 Model 객체에 데이터를 담아서 DispatcherServlet에 전달할 수 있다. DispatcherServlet에 전달된 Model 데이터는 View에서 가공되어 클라이언트에게 응답처리된다.
model.setAttribute("tempData", "model has data!!");
|
cs |
스프링 설정 파일에 InternalResourceViewResolver라는 빈(Bean) 객체를 생성하는데, InternalResourceViewResolver는 prefix, 리턴 값, suffix 값을 합쳐서 적절한 View 파일로 매핑하는 역할을 한다.
/WEB-INF/views/success.jsp
@RequestMapping("/success") public String success(Model model) { return "success"; } | cs |
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
|