Chapter 6-1

ChangWoo·2023년 8월 7일

Part 6. 스프링 MVC의 Controller

  • 스프링 MVC를 이용하는 경우 작성되는 Controller는 다음과 같은 특징이 있다.
    • HttpServletRequest, HttpServletResponse를 거의 사용할 필요 없이 필요한 기능 구현
    • 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
    • GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
    • 상속/인터페이스 방식 대신에 어노테이션 만으로도 필요한 설정 가능
  • 다른 프레임워크들과 달리 스프링 MVC는 어노테이션을 중식음으로 구성된다.

6.1 @Controller, @RequestMapping

  • 프로젝트 내 org.zerorc.controller 패키지 폴더에 SampleController라는 이름의 클래스를 작성한다.
< SampleController 클래스 >
package org.zerock.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/sample/*")
public class SampleController {
}
  • SampleController의 클래스 선언부에는 @Controller라는 스프링 MVC에서 사용하는 어노테이션을 적용하고 있다.
  • 작성된 SampleController 클래스는 자동으로 스프링의 객체로 등록되는데 servlet-context.xml에 그 이유가 있다.
< servlet-context.xml >
	<context:component-scan base-package="org.zerock.controller" />
  • servlet-context.xml에는 < context:component-scan > 이라는 태그를 이용해 지정된 패키지를 조사하도록 설정되어 있다.
  • 해당 패키지에 선언된 클래스들을 조사하면서 스프링에서 객체 설정에 사용되는 어노테이션들을 가진 클래스들을 파악하고 핑요하다면 이를 객체로 생성해서 관리한다.
  • 클래스 선언부에는 @Controller와 함께 @RequestMapping을 많이 사용한다.
  • @RequestMapping은 현재 클래스의 모든 메서드들의 기본적인 URL 경로가 된다.
< SampleController 클래스 >
package org.zerock.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import lombok.extern.log4j.Log4j;
@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleController {
	@RequestMapping("")
	public void basic() {
		log.info("basic................");		
	}
}
  • SampleController는 Lombok의 @Log4j를 사용한다.
  • @Log4j는 @Log가 java.util.Logging을 이용하는데 반해 Log4j 라이브러리를 활용한다.
  • Spring Legacy Project로 생성한 프로젝트는 기본적으로 Log4j가 추가되어 있으므로 별도의 설정이 필요하지 않다.
  • 프로젝트를 WAS에서 실행해보면 스프링이 인식할 수 있는 정보가 출력되는 것을 볼 수 있는데, 위와 같은 경우에는 아래와 같이 로그가 보인다.
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/],methods=[GET]}" onto public java.lang.String org.zerock.controller.HomeController.home(java.util.Locale,org.springframework.ui.Model)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/sample/*]}" onto public void org.zerock.controller.SampleController.basic()
  • 현재 프로젝트의 경우 '/'와 '/sample/*'는 호출이 가능한 경로라는 것을 확인할 수 있다.
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글