웹 프로그래밍 설계 모델
스프링 MVC 프레임워크 기반의 웹 프로그래밍 구조에 대해서 알아보자. 기본적으로 동작을 하는 과정을 그림으로 나타내면 다음과 같다.
-
DispatcherServlet 클래스가 브라우저의 요청을 받고, 그 요청을 HandlerMapping에게 넘겨준다.
- HandlerMapping은 많은 Controller중에 가장 적합한 것(URL, HTTP 메서드 및 정보, 파라미터 참고)을 선택해준다.
- Controller가 결정되었다면, 실제로 해당되는 컨트롤러의 메소드를 호출해야 되는데 호출방법이 타입에 따라 다르므로 아무리 Controller를 결정했다고 하더라도, DispatcherServlet은 알 길이 없기에 컨트롤 타입을 지원하는 HandlerAdapter라는 인터페이스가 적합한 파라미터를 추출해 해당 Controller의 메소드를 호출해준다.
- 다시 DispatcherServlet은 ViewResolver에게 Controller가 리턴한 View 이름을 참고해서 적절하게 View 오브젝트(JSP문서)를 찾아준다.
- View인 JSP로 브라우저에게 응답을 해준다.
1. DispatcherServlet 설정
DispatcherServlet은 자동으로 설정이 되어있다. 구성은 web.xml 에 서블릿을 매핑 WEB-INF 폴더의 web.xml 파일이 있고 , <servlet>태그와 <servlet-mapping> 태그가 이용되어있다.
<servlet>
<servlet-name>서블릿 별칭</servlet-name>
<servlet-class>서블릿명 (패키지 이름을 포함한 전체서블릿명)</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>서블릿별칭</servlet-name>
<url-pattern>/맵핑명</url-pattern>
</servlet-mapping>
만약 여기서 <init-param>을 초기 파라미터를 설정하지 않았을 경우, 자동으로 스프링 프레임워크가 설정해준다.
2. Controller 객체
Controller 객체는 DispatcherServlet이 클라이언트로부터 요청을 받고 가는 첫 관문이다.
(1) @Controller
Controller 객체는 개발자가 직접 구성하여야 한다.
- 스프링 설정파일(servlet-context.xml)에 "<annotation-driven />"태그를 넣어 준다.
- Controller 객체로 사용할 클래스를 정의해준다.
/* Controller 객체로 사용할 클래스 */
@Controller
public class HomeContoller{
...
}
(2) @RequestMapping
DispatcherServlet가 Controller를 찾았을때, @RequestMapping 어노테이션을 붙여서, 사용자로 부터 들어오는 요청을 매핑시켜준다.
(3) Model 타입의 파라미터
Controller에서 작업이 완료 후 DispatcherServlet에게 다시 올려주는데 이때 사용되는 객체가 Model과 View이다. 그 전에 컨트롤러에서 Model, View를 받을 수 있어야 한다. 이 후 DispatcherServler에 전달된 Model데이터는 View에서 가공되어 클라이언트에게 응답처리된다.
3. View 객체
DispatcherServlet은 클라이언트에게 응답을 하기위해 ViewResolver에게 위임하여, View를 찾는다. Controller객체에 있는 리턴값과 InternalResourceView의 prefix, suffix 값을 찾아서 합쳐준다.
전체적인 웹프로그래밍 구조를 한번에 보자.
STS를 이용해 스프링 MVC 프로젝트 만들기
STS를 통해 스프링 MVC 웹 서비스를 만들어 볼 것이다.
STS 설치는 다음링크를 참조하여 설치를 한다음에 실행하여주자.
STS 설치: https://mine-it-record.tistory.com/24
설치가 완료되었다면, 프로젝트를 하나 생성 해보자.
다음과 같이 생성 후 기본적으로 서버를 실행해보면, 다음과 같이 기본적으로 제공해주는 화면을 출력받으면 성공이다.
(기본적으로 톰캣 서버 설정이 완료 되어 있어야 됨)
스프링 MVC 프로젝트 실습
이전 챕터에서 만들었던 스프링프레임워크 모델 구조를 보자.
여기서 Login.java 파일을 만들어 실습해보자. (src/main/java/)
/* login.java */
package com.opentogether.test;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class Login {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login(Model model) {
model.addAttribute("loginKey", "nickName"); //모델에 데이터 추가
return "login"; //login.jsp
}
}
이제 view에 응답에 필요한 login.jsp 파일도 만들어보자. (src/main/webapp/WEB-INF/views/)
<!-- login.jsp -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Hello world!</h1>
<P>loginKey is ${loginKey}.</P>
</body>
</html>
다음과 같이 짠 후 다시 프로그램을 재실행해보면 이제 "localhost:8090/test/login" 이라고 브라우저에서 요청을 하면 작성했던 페이지를 보여준다.
'Web[웹] > Spring Framework' 카테고리의 다른 글
[Spring] Controller 객체 구현 : MVC 프로젝트 (2) (0) | 2019.12.03 |
---|---|
[Spring] Service & Dao 객체 구현 : MVC 프로젝트 (1) (0) | 2019.11.28 |
[Spring] 어노테이션을 이용한 스프링 설정 (0) | 2019.11.21 |
[Spring] 의존객체 자동 주입 : @Autowired와 @Resource (0) | 2019.11.20 |
[Spring] 스프링 설정 파일 분리와 빈 스코프(Bean Scope) (0) | 2019.11.20 |