티스토리 뷰

반응형

목록

@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........................");
}

 

@ㄱ

반응형
댓글