개요
안녕하세요. J4J입니다.
이번 포스팅은 스프링을 이용한 MVC패턴 구현 중 다섯 번째인 @Controller구성에 대해 적어보는 시간을 가져보려고 합니다.
들어가기에 앞서
이번 포스팅은 위의 스프링 MVC구조에서 빨간 박스에 포함되는 내용에 대해 적어보고자 합니다.
Controller란?
컨트롤러는 모델과 뷰 사이를 연결해주는 구간으로 비즈니스 로직이 처리된 모델과 사용자의 화면에 보일 뷰 이름을 리턴해줍니다.
컨트롤러로 사용되는 어노테이션은 보통 @Controller, @RestController 등이 있는데 @Controller 같은 경우는 이번 포스팅에서와 같이 스프링과 JSP를 이용한 MVC패턴을 만들 때 사용되고 @RestController는 단순히 데이터만 제공해주는 Rest API를 만들기 위해 사용됩니다.
Rest API에 대한 포스팅은 추후에 기회가 되면 포스팅을 하도록 하겠습니다.
프로젝트 설정
※ 스프링과 관련된 코드는 모두 STS-3.9.12.RELEASE 버전을 기준으로 작성되었습니다.
[ 1. 컨트롤러 설정을 위한 dependency 추가 (일반적으로 프로젝트 생성 시 추가되어 있음) ]
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.spring</groupId>
<artifactId>mvc</artifactId>
<name>mvc</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<java-version>1.8</java-version>
<org.springframework-version>5.2.11.RELEASE</org.springframework-version>
<org.aspectj-version>1.9.6</org.aspectj-version>
<org.slf4j-version>1.7.30</org.slf4j-version>
</properties>
<dependencies>
<!-- Spring -->
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- MySQL, MyBatis, @Repository -->
...
<!-- @Service -->
...
</dependencies>
<build>
...
</build>
</project>
[ 2. servlet-context.xml 설정 추가 ]
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<annotation-driven /> <!-- Spring MVC를 위한 설정 -->
<resources mapping="/resources/**" location="/resources/" /> <!--/resources/**로 요청할 경우 ${webappRoot}/resources 탐색 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- View Resolver(뷰 리졸버) -->
<beans:property name="prefix" value="/WEB-INF/views/" /> <!-- view name 앞에 붙을 경로 -->
<beans:property name="suffix" value=".jsp" /> <!-- view name 뒤에 붙을 파일 확장자 -->
</beans:bean>
<context:component-scan base-package="com.spring.mvc.controller" /> <!-- contoller관련 클래스 등록 패키지 -->
</beans:beans>
[ 3. Controller 클래스 생성 (com.spring.mvc.controller.CartController) ]
package com.spring.mvc.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import com.spring.mvc.dto.Cart;
import com.spring.mvc.service.CartService;
@Controller // 해당 클래스를 빈으로 등록
public class CartController {
@Autowired
CartService cartServiceImpl;
@PostMapping("/insertCarts.do")
public String insertCarts(Cart cart) {
cartServiceImpl.insertCarts(cart); // 카트에 담길 데이터 저장
return "redirect:selectCart.do"; // get요청으로 "도메인/selectCart.do" URL 호출
}
@GetMapping("/selectCart.do") // HTTP메서드 중 get요청으로 "도메인/selectCart.do"를 URL로 접근할 경우
public String selectCart(Model model) {
model.addAttribute("carts", cartServiceImpl.selectCart()); // carts라는 값에 카트에 담겨있는 물건을 데이터베이스에서 가져와 저장
return "mart"; // mart라는 view name을 리턴 (view resolver를 통해 view object로 변경)
}
@GetMapping("/") // 프로젝트 시작 시 mart페이지로 리다이렉트
public String init() {
return "redirect:selectCart.do";
}
}
해당 컨트롤러가 올바르게 동작하는지는 다음 포스팅에서 확인하도록 하겠습니다.
ServletContext 설정 파일 변경 (xml → Java)
※ 스프링과 관련된 코드는 모두 STS-3.9.12.RELEASE 버전을 기준으로 작성되었습니다.
위에 작성한 코드들중 다른 것은 변경 없이 servlet-context.xml파일만 다음과 같이 변경해주시면 됩니다.
[ 1. servlet-context.xml 파일 수정 ]
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- java 방식 -->
<context:annotation-config></context:annotation-config>
<beans:bean class="com.spring.mvc.config.ServletContext"></beans:bean>
<!-- xml 방식 -->
<!--
<annotation-driven /> Spring MVC를 위한 설정
<resources mapping="/resources/**" location="/resources/" /> /resources/**로 요청할 경우 ${webappRoot}/resources 탐색
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> View Resolver(뷰 리졸버)
<beans:property name="prefix" value="/WEB-INF/views/" /> view name 앞에 붙을 경로
<beans:property name="suffix" value=".jsp" /> // view name 뒤에 붙을 파일 확장자
</beans:bean>
<context:component-scan base-package="com.spring.mvc.controller" /> contoller관련 클래스 등록 패키지
-->
</beans:beans>
[ 2. ServletContext 클래스 생성 (com.spring.mvc.config.ServletContext) ]
package com.spring.mvc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration // 설정파일로 등록
@EnableWebMvc // Spring MVC를 위한 설정
@ComponentScan(basePackages = {"com.spring.mvc.controller", "com.spring.mvc.config"}) // contoller, config 관련 클래스 등록 패키지
public class ServletContext implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { // /resources/**로 요청할 경우 ${webappRoot}/resources 탐색
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
@Bean
public ViewResolver viewResolver() { // View Resolver(뷰 리졸버)
InternalResourceViewResolver vr = new InternalResourceViewResolver();
vr.setPrefix("/WEB-INF/views/"); // view name 앞에 붙을 경로
vr.setSuffix(".jsp"); // view name 뒤에 붙을 파일 확장자
return vr;
}
}
파일 구성
정리
이상으로 스프링을 이용한 MVC패턴 구현 중 다섯 번째인 @Controller구성에 대해 간단하게 알아보는 시간이었습니다.
읽어주셔서 감사합니다.
'Spring > Spring' 카테고리의 다른 글
[Spring] Rest API / @RestController(1) (2) | 2021.02.24 |
---|---|
[Spring] 스프링을 이용한 MVC패턴 구현(6) - JSP를 이용한 화면 구성 (0) | 2021.02.22 |
[Spring] 스프링을 이용한 MVC패턴 구현(4) - @Service 구성 (0) | 2021.02.16 |
[Spring] 스프링을 이용한 MVC패턴 구현(3) - MySQL, MyBatis, @Repository 구성 (0) | 2021.02.13 |
[Spring] 스프링을 이용한 MVC패턴 구현(2) - 프로젝트 초기 설정 방법 (0) | 2021.02.11 |
댓글