참고 도서 : 스프링5 프로그래밍 입문 - 최범균 저 |
ch09. 스프링 MVC 시작하기
-스프링이 지원하는 웹 MVC 프레임워크
[MVC 패턴] -대화형 애플리케이션을 <모델/뷰/컨트롤러> 3개의 서브 시스템으로 구조화한 패턴 -Model-View-Controller 패턴 |
[Spring MVC] 사용자 인터페이스, 데이터 및 논리 제어를 구현하는데 널리 사용되는 소프트웨어 디자인 패턴이다. 소프트웨어의 비즈니스 로직과 화면을 구분하는데 중점을 둔다. 간단하게 Model, View, Controller로 분리하여 개발하는 디자인 패턴이다. ▷Model 데이터와 비즈니스 로직을 관리한다. 애플리케이션이 포함해야할 데이터가 무엇인지를 정의한다. 일반적으로 POJO로 구성된다. ▷View 레이아웃과 화면을 처리한다. 애플리케이션의 데이터를 보여주는 방식을 정의한다. JSP JSP 이외에도 Thymeleaf, Groovy 등 여러 Template Engine이 있다. ▷Controller VIew와 Model 사이의 인터페이스 역할을 한다. 애플리케이션 사용자의 입력에 대한 응답으로 Model 및 View를 업데이트하는 로직을 포함한다. Model/View에 대한 사용자 입력 및 요청을 수신하여 그에 따라 적절한 결과를 Model에 담아 View에 전달한다. 즉, Model Object와 이 Model을 화면에 출력할 View Name을 반환한다. |
▶[프로젝트 생성]
1) 메이븐 설정 : [pom.xml 파일]
-<packaing> 값으로 war 주기
-스프링 이용 웹 어플리케이션 개발에 필요한 의존 설정
-서블릿 3.1/ JSP 2.3, JSTL 1.2 에 대한 의존을 추가
-spring-webmvc 모듈에 대한 의존 추가
<dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.2-b02</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.2.RELEASE</version> </dependency> </dependencies> |
2) 그레이들 설정 : [build.gradle 파일]
-‘war’ 플러그인 추가 : apply plugin: ‘war’
-스프링 이용 웹 어플리케이션 개발에 필요한 의존 설정
-서블릿 3.1/ JSP 2.3, JSTL 1.2 에 대한 의존을 추가
-spring-webmvc 모듈에 대한 의존 추가
dependencies { providedCompile 'javax.servlet:javax.servlet-api:3.1.0' providedRuntime 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02' compile 'javax.servlet:jstl:1.2' compile 'org.springframework:spring-webmvc:5.0.2.RELEASE' } |
▶[이클립스 톰캣 설정]
-이클립스에서 웹 프로젝트 테스팅하기 위해서는 웹 서버 설정 필요
-톰캣을 이용하여 톰캣 8.5 를 이클립스 서버로 등록
[window]->[Preferences] 메뉴 실행 [Server/Runtime Environments 선택] [Add] -> 톰캣 서버를 등록 |
▶[스프링 MVC 설정]
-스프링 MVC 실행에 필요한 최소 설정
➀ 스프링 MVC 주요 설정 (HandlerMapping, ViewResolever 등) ➁ 스프링의 DispatcherServlet 설정 |
▷ ➀ 스프링 MVC 주요 설정
@Configuration
@EnableWebMvc //스프링 MCV 사용에 필요한 기본적 구성 설정
public class MvcConfig implements WebMvcConfigurer {
@Override //디폴트 서블릿 설정
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Override //ViewResolever 설정
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/view/", ".jsp");
}
}
◈ @EnableWebMvc 애노테이션
-스프링 MVC 사용에 필요한 기본적인 구성을 설정 |
◈ WebMcvConfigurer 인터페이스
-스프링 MVC 개별 설정 조정에 필요한 메소드를 내부에 정의해놓았다. -내부의 configureDefaultServletHandling() 메소드 : 디폴트 서블릿 설정 -내부의 configureViewResolvers() 메소드 : ViewResolver 설정 |
-> 위 설정 = 스프링 MVC 이용 웹 어플리케이션 개발에 필요한 최소 설정
▷ ➁ 스프링의 DispatcherServlet 설정
-스프링 MVC가 웹 요청을 처리하려면 DispatcherServlet 을 통해 웹 요청을 받아야 한다.
-이를 위해, web.xml 파일에 DispatcherServlet을 등록한다.
[web.xml] 파일
<servlet>
<servlet-name>dispatcher</servlet-name> // 이름을 dispatcher로 등록
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param> //contextClass 초기화 파라미터 생성
<param-name>contextClass</param-name>
<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</init-param>
<init-param> //contextConfiguration 초기화 파라미터 값을 지정
<param-name>contextConfigLocation</param-name>
<param-value> //값에 스프링 설정 클래스의 목록을 지정
config.MvcConfig
config.ControllerConfig
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping> //서블릿 매핑 설정
<servlet-name>dispatcher</servlet-name>
//모든 설정을 DispatcherServlet이 처리하도록 서블릿 매핑을 설정
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter> //서블릿 필터 등록(HTTP 요청 파라미터 인코딩 처리를 위함)
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name> //HTTP 요청 읽어올 애 사용할 인코딩 지정
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
<param-name>contextConfigLocation</param-name> <param-value> //값에 스프링 설정 클래스의 목록을 지정 config.MvcConfig config.ControllerConfig </param-value> -DispatcherServlet은 초기화 과정에서 contextConfiguration 초기화 파라미터가 지정한 스프링 설정 파일을 이용해서 스프링 컨테이너를 초기화한다. -즉, 여기서의 설정에서는 MvcConfig클래스와 ControllerConfig 클래스를 이용해서 스프링 컨테이너를 생성한다 |
필요한 설정은 여기서 끝났다. |
▶[코드 구현]
-클라이언트 요청 처리할 컨트롤러 구현 -처리 결과를 보여줄 JSP 구현 |
➀ 컨트롤러 구현
▶스프링 컨트롤러 : 웹 요청 처리하고 그 결과를 뷰에 전달하는 스프링 빈 객체 - 반드시 스프링 컨트롤러로 사용될 클래스에 @Controller 붙여야 함 - @GetMapping, @PostMapping (요청 매핑 애노테이션) 이용 -> 처리할 경로 지정 |
<컨트롤러 구현>
@Controller // 스프링 MVC 컨트롤러로 해당 클래스를 등록
public class HelloController {
@GetMapping("/hello") //메소드가 처리할 요청 경로 지정
public String hello(Model model, //컨트롤러 처리 결과를 뷰에 전달 시 사용
@RequestParam(value = "name", required = false) String name) {
//HTTP 요청 파라미터 값 -> 메소드 파라미터로 전달
model.addAttribute("greeting", "안녕하세요, " + name);
//뷰에 전달할 데이터 지정 목록
return "hello";
//이 컨트롤러의 처리결과를 보여줄 뷰 이름 지정하여 리턴
}
}
<구현한 컨트롤러를 스프링 빈으로 등록>
@Configuration
public class ControllerConfig {
@Bean //구현한 컨트롤러를 스프링 빈으로 등록
public HelloController helloController() {
return new HelloController();
}
}
➁ JSP 구현
컨트롤러가 생성한 결과를 보여줄 뷰 코드는 JSP를 이용해서 구현한다.
- 앞서 구현한 컨트롤러의 리턴한 뷰 이름은 “hello”였다.
- JSP 파일 이름은 “hello.jsp”이다.
[hello.jsp]
<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
인사말: ${greeting}
</body>
</html>
뷰 이름과 JSP 파일의 연결은 MvcConfig 클래스의 다음 설정을 토대로 이뤄진다.
@Override //ViewResolever 설정
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/view/", ".jsp");
//JSP를 뷰 구현으로 사용할 수 있게 설정
}
-JSP 로 뷰 코드를 구현할 경우,
컨트롤러에서 추가한 속성 이름을 이용하여 속성값을 응답 결과에 출력하게 된다.
앞으로도 다음의 [전체 구조] 는 크게 벗어나지 않는다. - 스프링 MVC 설정 - 컨트롤러 구현 - 뷰 코드 구현 |
'Web(웹)_관련 공부 모음 > [개념]_스프링 5 프로그래밍' 카테고리의 다른 글
ch11. MVC 1: 요청 매핑/커맨드 객체/ 리다이렉트/ 폼 태그/모델 (0) | 2022.02.01 |
---|---|
ch10. 스프링 MVC 프레임워크 동작 방식 (0) | 2022.01.31 |
ch08. DB 연동 (0) | 2022.01.28 |
ch07. AOP 프로그래밍 (0) | 2022.01.27 |
ch06. 빈 라이프사이클과 범위 (0) | 2022.01.27 |