웹 프로그래밍을 구축하기 위한 설계 모델
- model1과 model2
Model1
- 모듈화시키지 않고 하나의 파일로 처리
- html코드 안에 java코드와 들이 함께 있는 것
- 개발 속도가 빠름
- 유지보수 어려움
Model2
- 각각의 기능을 모듈화 시키는 것
- 유지보수 수월함
- 클라이언트가 서버에 reqeust -> Controller가 request를 받아서 어떤 Service를 받을지 결정 -> DAO라는 객체를 만들어서 MODEL이라는 객체를 이용해서 DB와 통신 -> 통신해서 얻어온 값을 Controller에 반환 -> View라는 객체를 만들어서 (jsp) response
- MVC패턴을 기본으로 함
- m/v/c를 철저하게 분류해서 작업할 수 있음
- 스프링에서는 model2방식을 사용
스프링 MVC 프레임워크 설계 구조
- 브라우저(클라이언트)의 요청
- DispatcherServlet이 요청을 받음
- DispatcherServlet : http프로토콜 생성
- DispatcherServlet이 HandlerMapping에 전달 , HandlerMapping가 DispatcherServlet에게 Controller 반환
- HandlerMapping : 다수의 Controller 중 요청에 맞는 Controller(클래스)를 선택해줌
- DispatcherServlet이 HandlerAdapter에 요청 , HandlerAdapter가 model,view 데이터를 결과로 반환
- HandlerAdapter : Controller(클래스)가 가지고 있는 다수의 메소드 중 적합한 메소드 를 찾아줌
- DispatcherServlet이 ViewResolver에게 view에 적합한 jsp문서를 찾아달라고 요청
- ViewResolver가 적합한 View 반환, View클라이언트에게 jsp로 응답, http프로토콜 끊어짐
스프링 프로젝트 작업 과정
1. web.xml에서 DispatcherServlet을 등록
- 클라이언트로부터 들어오는 모든 요청을 처리해주므로 관문 역할
<servlet> <servlet-name>appServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> ... <load-on-startup>1</load-on-startup> </servlet>
<load-on-startup>1</load-on-startup>
: 사용자의 모든 요청을 받기 위해서 서블릿 맵핑 경로는 '/'로 설정
2. web.xml에서 servlet-context.xml(스프링 설정 파일)을 등록
- DispatcherServlet을 정의한 servlet태그 내부에 init-param으로 작성
<init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> </init-param>
초기 파라미터로 스프링 설정 파일을 지정한 경우 / 지정하지 않은 경우
- 초기 파라미터로 스프링 설정파일(servlet-context.xml)을 지정해준 경우에는 해당 xml을 이용하여 스프링 컨테이너를 생성
- 초기 파라미터로 스프링 설정파일을 지정하지 않은 경우 서블릿 별칭을 이용해서 스프링 컨테이너를 자동으로 생성
- 일반적인 방법은 초기 파라미터값을 지정
3. 1,2번 작업을 마치면 스프링 컨테이너가 생성됨
- 이 때, HandlerMapping / HandlerAdapter / ViewResolver는 자동으로 생성이 됨
- 개발자는 Controller와 View만 만들어주면 됨
4. Controller 생성 과정
(1) servlet-context.xml에 <annotation-driven />
태그 작성
(2) 실제로 컨트롤러로 사용할 객체는 일반적인 클래스를 정의한 후 @Controller를 붙여줌
<annotation-driven />
: 스프링 컨테이너를 사용하기 위한 클래스들이 빈 객체로 존재하게 됨
5. RequestMapping
- 사용할 Controller 클래스의 내부 메소드 중 어떤 것을 사용할 것인지 mapping
@Controller # 컨트롤러로 등록 public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); # get방식의 '/'가 request되면 해당 메소드로 maaping @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { logger.info("Welcome home! The client locale is {}.", locale); ... return "home"; } }
6. Controller객체 - Model타입의 파라미터
- 개발자는 Model객체에 데이터를 담아서 DispatcherServlet에 전달할 수 있음
- DispatcherServlet에 전달된 Model데이터는 View에서 가공되어 클라이언트한테 응답처리됨
public String home(Locale locale, Model model) { # Controller가 반환한 Model데이터 .... model.addAttribute("serverTime", formattedDate );
7. 응답을 위한 View 객체
(1) servlet-context.xml에 ViewResolver 등록하기
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<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>
(2) prefix + Controller가 리턴한 값 + suffix = jsp파일명
<beans:property name="prefix" value="/WEB-INF/views/" />
+return "home";
+ <beans:property name="suffix" value=".jsp" />
= /WEB-INF/views/home.jsp
전체적인 웹프로그래밍 구조
스프링 프로젝트 구조
- java파일 : java파일들이 위치한다. 주로 패키지로 묶어서 관리한다. 웹 애플리케이션에서 사용되는 Controller, Service, DAO객체들이 위치한다.
- webapp : 웹과 관련된 파일들(스프링 설정파일, JSP파일, HTML파일 등..)이 위치한다.
- resources : JSP파일을 제외한 HTML, CSS, JS파일 등이 위치한다.
- spring폴더 : 스프링 컨테이너를 생성하기 위한 스프링 설정 파일이 위치한다.
- views폴더 : View로 사용될 JSP파일이 위치한다.
- pom.xml파일 : 메인 레파지토리에서 프로젝트에 필요한 라이브러리를 내려받기 위한 maven설정 파일
'Spring > 개념지식 및 에러사항' 카테고리의 다른 글
[Spring] JPA 기초 (0) | 2021.07.12 |
---|---|
RestController 생성하기 (0) | 2021.07.05 |
Log4j import에러 (0) | 2021.07.02 |
JUnit import 안되는 경우 (0) | 2021.07.02 |
[Spring] 공부내용 기록 (0) | 2021.03.13 |
댓글