[Spring] Spring Web MVC (3)

민픽minpic·2024년 4월 19일
0

Spring Framework

목록 보기
5/5

이전까지는 spring에서 MVC에 대한 이야기를 했다.
이번 게시물에서는 사용방법을 확인해보려고 한다.

DispatcherServlet는 클라이언트의 요청을 받아서 HandelerMapping 을 통해 컨트롤러 로직이 실행된다. 그렇다면 어떤 클래스가 컨트롤러인지 알 수 있을까?

간단하게, class 위에 @Controller annotation을 표시하면 된다.

그러면 servlet_context.xml 파일에 작성된

<context:component-scan base-package="com.ssafy" />

를 통하여 controller 를 스캔할 수 있다.

@Controller // 사용자 요청을 받아들이는 타입의 빈! 
public class MainController {
	
	// ...
	
}

그리고 @RequestMapping을 통하여 URL을 맵핑하여 사용한다. 보통 method 위에 @RequestMapping 어노테이션을 달고 path와 method를 지정해주면 된다.

@RequestMapping(path = "/", method= RequestMethod.GET)

하지만 대신에 간단하게 @GetMapping 또는 @PostMapping 을 사용한다.

@GetMapping("/")
@PostMapping("/")

만약 요청받은 url이 "user/login" 과 같이 되어있다면 다음과 같이 작성하면 된다.

@GetMapping("/user/login")
@PostMapping("/user/login")

또는 class 위에 @RequestMapping("/user")을 달고, method 위에는 @PostMapping("/login") 만 달아도 올바르게 호출된다.

@RequestMapping("/user")
@Controller // 사용자 요청을 받아들이는 타입의 빈! 
public class MainController {
	
    @PostMapping("/login")
	public void login(){
    
    // code ...
    
    }
	
}

그리고 또 한가지 편리한 점이 있다.

만약 post 호출을 하게 된다면, 클라이언트로부터 넘어오는 값들이 있을 것이다.

기존에 우리는 jsp에 작성된 form 안에 name을 받아서 하나씩 변수에 선언해주고, 그것으로 dto 객체에 값을 넣어 활용했다.

하지만 우리는 spring을 사용하기 때문에 쉽게 값을 받아올 수 있다.
jsp는 변경 없이 같다. 하지만 controller의 구현은 다르다.

우선 dto에 담기지 않는 그냥 파라미터는 다음과 같이 받아오면 된다.

public String loginPost(@RequestParam("id") String id, @RequestParam("pass")  String pass, @RequestParam("favorite")  List<String> fav){
		System.out.println("--------------------------------");
		log.trace("id : {} ,pass :  {}, favorite: {} ", id, pass, fav);
		return "index";
	}

dto가 존재할 때에는 다음과 같이 @ModelAttribute 를 선언하고 객체 자체를 받아오면 된다.

@PostMapping("/regist")
	public String registPost(@ModelAttribute Book bk) {
		
		return "regist_result";
	}

이외에도 controller 파라미터로 다양한 Object를 받을 수 있다.

profile
사진찍는 개발자 / 한 가지 개념이라도 깊이있게

0개의 댓글