스프링 MVC를 이용하는 경우 작성되는 Controller는 다음과 같은 특징이 있습니다.

-  HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 필요한 기능 구현

다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능

-  GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능

-  상속/인터페이스 방식 대신에 어노테이션만으로도 필요한 설정 가능

 

1. @Controller, @RequestMapping

 

테스트를 위한 controller class 작성

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/sample/*")
public class TestController {

}

 TestController의 클래스 선언부에는 @Controller라는 스프링 MVC에서 사용하는 어노테이션을 적용하고 있습니다.

작성된 TestController 클래스는 위와 같이 자동으로 스프링의 객체(Bean)로 등록되는데 servlet-context.xml에 그 이유가 있습니다.

 

servlet-context.xml의 일부

<context:component-scan base-package="kr.co.web.controller" />

- 프로젝트를 생성하면 자동으로 생성됩니다.

 

servlet-context.xml에는 <context:component-scan>이라는 태그를 이용해서 지정된 패키지를 조사(스캔)하도록 설정되어 있습니다.

해당 패키지에 선언된 클래스들을 조사하면서 스프링에서 객체(Bean) 설정에 사용되는 어노테이션들을 가진 클래스들을 파악하고 필요하다면 이를 객체로 생성해서 관리하게 됩니다.

TestController 클래스가 스프링에서 관리되면 화면상에는 클래스 옆에 작게 's'모양의 아이콘이 추가됩니다.

클래스 선언부에는 @Controller와 함께 @RequestMapping을 많이 사용합니다.

@RequestMapping은 현재 클래스의 모든 메서드들의 기본적인 URL 경로가 됩니다.

예를 들어, TestController 클래스를 다음과 같이 '/sample/*' 이라는 경로로 지정했다면 다음과 같은 URL은 모두 TestController에서 처리됩니다.

더보기

- /sample/aaa

- /sample/bbb

@RequestMapping 어노테이션은 클래스의 선언과 메서드 선언에 사용할 수 있습니다.

 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/sample/*")
public class TestController {
	
	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
	
	@RequestMapping("")
	public void basic() {
		logger.info("basic.........");
	}
}

 

프로젝트를 WAS에서 실행해보면 스프링이 인식할 수 있는 정보가 출력되는 것을 볼 수 있는데, 위와 같은 경우에는 아래와 같이 로그가 보입니다.

INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/sample/*]}" onto public void kr.co.web.controller.TestController.basic()

현재 프로젝트의 경우 '/'와 'sample/*'는 호출이 가능한 경로라는 것을 확인할 수 있습니다.

 

 

2. @RequestMapping의 변화

 

@Controller 어노테이션은 추가적인 속성을 지정할 수 없지만, @RequestMapping의 경우 몇 가지의 속성을 추가할 수 있습니다.

이 중에서도 가장 많이 사용하는 속성이 method 속성입니다.

method 속성은 흔히 GET방식, POST 방식을 구분해서 사용할 때 이용합니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping("/sample/*")
public class TestController {
	
	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
		
	@RequestMapping(value="/basic", method = RequestMethod.GET)
	public void basicGet() {
		logger.info("basic get..........");
	}
	
	@RequestMapping(value="/basic", method = RequestMethod.POST)
	public void basicPost() {
		logger.info("basic post..........");
	}
}

'JAVA > spring 이론' 카테고리의 다른 글

모델 2와 스프링 MVC  (0) 2020.07.03
프로젝트 로딩 구조  (0) 2020.07.02
스프링 MVC 프로젝트 내부 구조  (0) 2020.07.02

+ Recent posts