10월 27일 목요일 [코드로 배우는 스프링웹프로젝트] -2day(3)
목록
@Controller
@RequestMapping
Controller의 파라미터 수집 => 파라미터의 수집과 변환 까지 (p132)
스프링 MVC의 Controller
스프링 MVC를 이용하는 경우 작성되는 Controller의 특징
* HttpServlerRequest, HttpServlerResponse를 거의 사용하지 않고 필요한 기능 구현 가능
* 다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
* GET , POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
* 상속/인터페이스 방식 대신에 어노테이션만으로도 필요한 설정 가능
다른 프레임워크들과 달리 스프링 MVC는 어노테이션을 중심으로 구성됨 => 각 어노테이션의 의미에 대해 주의해가며 공부하기
@Controller, @RequestMapping
<!--SampleController 클래스-->
package org.zerock.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/sample/*")
public class SampleController {
}
@Controller
* 작성된 클래스는 자동으로 스프링의 객체(Bean)로 등록됨 ==> servlet-context.xml에 이유가 있음
<!--servlet-context.xml의 일부-->
<context:component-scan base-package="org.zerock.controller" />
<context:component-scan>이라는 태그를 이용 : 지정된 패키지를 스캔하도록 설정되어 있음 => 그럼 스프링은 이 패키지 안에 클래스들을 스캔하면서 객체(Bean) 설정에 사용되는 어노테이션들을 가진 클래스들을 파악하고 이를 객체로 생성해서 관리한다
이 클래스들이 스프링에서 객체로 생성되서 관리되면 클래스 옆에 작게 's' 모양의 아이콘이 추가됨
@RequestMapping
* 현재 클래스의 모든 메서드들의 기본적인 URL 경로가 됨 => URL은 모두 SampleController에서 처리됨
* 클래스 선언과 메서드 선언에 사용할 수 있음
//SampleController 클래스
@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleController {
@RequestMapping("")
public void basic() {
log.info("basic........................");
}
@Log4j
Log4j는 Lombok을 이용해 로그를 기록하는 Logger를 변수로 생성함 ==> 쉽게 말해 로그를 작성해주는 어노테이션
Spring Legacy Project로 생성한 프로젝트는 기본적으로 Log4j가 추가되어 있으므로 별도의 설정이 필요하지 않음
✅ pom.xml에서 <scope>runtime</scope> 이 부분을 지워야 Log4j가 돌아갈 수 있게 됨!!
@RequestMapping의 변화
@RequestMapping의 경우 몇 가지 속성을 추가할 수 있음(@Controller는 못함)
method 속성을 추가해서 GET,POST 방식을 구분해서 사용할 때 이용함
스프링 4.3 이후부터 @RequestMapping을 줄여서 @GetMapping, @PostMapping 으로 등장함
아래와 같이 비교하기
//SampleController 일부
@RequestMapping(value="/basic", method= {RequestMethod.GET, RequestMethod.POST})
public void basicGet() {
log.info("basic get........................");
}
@GetMapping("/basicOnlyGet")
public void basicGet2() {
log.info("basic get only get........................");
}
@ㄱ