yahayaha

2-2 스프링 MVC Controller 본문

spring/프로젝트

2-2 스프링 MVC Controller

yaha 2024. 1. 16. 16:57

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

 

1. HttpServletRequest, HttpServelResponse를 거의 사용할 필요 없이 필요한 기능 구현

( HttpServletRequest를 쓰는 가장 큰 이유는 파라미터를 수집하려고 사용하는 것인데 자동으로 처리해줌. ) 

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

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

(@GetMapping @PostMapping)

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

 

 

 

1. @Controller, @RequestMappin

 

먼저 @Controller가 뭘 뜻하냐면

해당 클래스의 인스턴스를 스프링의 빈에 등록하고 컨트롤러로 사용 가능

쉽게 말해서 이 어노테이션이 있으면 스프링의 빈에 등록이 된다 생각하면됩니다.

 

하지만 <component-scan> 이랑 결합이 되어야 사용가능함.

 

 

@controller만 있다고 되는게 아니라 servlet-context로 가보면.

<component-scan>이 있음. 이게 controller패키지를 다 조사(스캔)을 함 

 

스캔을 싹 하다가 @Controller라는 어노테이션이 있으면 <component-scan>에서 이건 스프링 빈으로 등록이 되어야 함.  하고 판단해서 @controller 어노테이션이 사용이 가능함.

 

@RequsetMapping은 스프링 4.3 전까지는 @RequestMapping( method = 'get' ) 방식으로 get post 명시를 했어야함.

 

하지만 4.3이후 버전에서는 @GetMapping, @PostMapping으로 간단하게 표현이 가능하도록 바뀜.

 

 

2. 파라미터 수집 

스프링 MVC의 컨트롤러는 메서드으 ㅣ파라미터를 자동으로 수집하거나 변환하는 편리한 기능을 제공함.

 

하지만 조건이 있음.

 

Java Bean 규칙에 맞게 작성되어야함.

 

 

 

먼저 이름과 나이를 수집할 수 있게 코드를 작성 스프링 MVC가 내부적으로 sampleDTO를 파라미터로 사용하게 될거임.

 

이런식으로

파라미터로 쓰게되면 객체를 알아서 만들게됨. 

 

그럼 우리가 값을 던지면 파라미터를 알아서 수집을 하게됨. 

 

그러려면 객체를 만들 수 있어야하는건데,

 

객체를 만들려면 필요한게 있음. 생성자나 게터 세터등등 

자바 bean처럼 작동을 하게됨. setname setage 같은게 자동으로 호출이됨. 

 

그래서 이렇게 만들고 controller에서 파라미터 타입을 써주면 자동으로 수집이 됨.

 

그럼 controller에서 GetMapping을 실행 해 보면

 

이런식으로 뜸 dto에 name과 age라는 데이터가 있으니 데이터를 던져 볼 예정임

 

 

데이터를 던진걸 확인 해 보려면 sts 로그창을 한번 보면.

데이터가 들어간걸 알 수 있음.

 

이런식으로 자바 beans 라는것만 명싱 하면됨.

 

 

3. Model

Model 객체는 JSP에 컨트롤러에서 생성된 데이터를 담아서 전달하는 역할임.

모델 2 방식에서 사용하는 request.setAttribute()와 유사한 역할.

과거에는 ModelAndView를 사용.

 

모델에 담는 데이터 -> 파라미터가 아니라 다른 곳에서 발생한 데이터를 담기 위한 그릇임.

 

모델 : 나한태 전달된 데이터는 아닌데 화면에 나오는데는 필요해.

가장 대표적인건 게시판. 게시판중에서 목록페이지가 해당됨.

 

이런 데이터를 담는게 Model이라고 생각하면 됨.

 

4. @ModelAttribute 

컨트롤러에서 메서드의 파라미터는 기본 자료형을 제외한 객체형 타입은 다시 화면으로 전달.

 

@ModelAttribute는 명시적으로 화면에 전달되도록 지정하는것.

 

@GetMapping("/bookbean2")
public String bookbean2(SampleDTOList list){

	log.info(list);
    
    return "sample/bookbean2
}

이렇게 해도 화면에는 전달이 됨. 하지만 

내가 이 데이터를 명시적으로 어떤 이름으로 쓰려고 할 때 쓰는게 @ModelAttribute임

@GetMapping("/bookbean2")
public String bookbean2( @ModelAttribute("slist") SampleDTOList list){

	log.info(list);
    
    return "sample/bookbean2
}

 

 


// modelAttribute 사용 X
<h2>${sampleDTOList}</h2>


// modelAttribute 사용 O
<h2>${slit}</h2>

 

이런식으로 전달 될 때 조금 더 명시적으로 해주는 역할이 @ModelAttribute임

 

 

 

 

 

 

 

3가지로 정리를 한번 해보자.

 

1. 스프링은 파라미터를 앵간한건 다 자동으로 수집할 수 있다.

2. 모델을 이용해서 파라미터는 없는데 내가 전달해 줘야하는 데이터가 있으면 같이 전달 해 줄 수 있다.

모델이라는건 용기다.

3. Redirect는 한 번만 전달 할 때 쓴다.

 

 

 

-----------------------------------------------------

빠진 내용이 은근 많습니다. 하지만 최대한 정리했습니다.

'spring > 프로젝트' 카테고리의 다른 글

4. CRUD (read)  (0) 2024.01.20
3. CRUD (insert)  (0) 2024.01.20
2. 영속 계층 구현 준비하기  (0) 2024.01.20
1. 오라클 테이블 생성  (0) 2024.01.18
0. 게시판 만들기 환경 설정  (0) 2024.01.17