15주차 - Spring (2) Controller에 대해 알아보자

2022. 10. 18. 11:14Spring framwork

이번의 목표

01. 컨트롤러(Controller)에 대해 알아보자.

02. 컨트롤러를 만들어보자.


01. 컨트롤러(Controller)에 대해 알아보자

지난 시간에는 jsp 파일에 접근 하는 방식에 대해 공부했었습니다.

@RequestMapping이 무엇인지 그리고 어떤 기능을 하는지에 대해 알았습니다.

컨트롤러 파일에 대해 좀더 자세히 알아보기 위해 HomeController.java 의 코드를 보겠습니다.

여기서 주의깊게 볼것들은 밑줄친 코드입니다.

먼저 Logger 라는 객체를 이용하여 logger.info()를 쓰면 콘솔창에 값을 출력할 수 있습니다.

System.out.print()와 같은 기능입니다.

 

그리고 다음은 @RequestMapping() 입니다.

@RequestMapping 어노테이션에는 value, method를 사용합니다.

이때, method를 지정하지 않는다면 GET, POST 둘다 받게 됩니다.

이렇게 두가지 모두를 받게하거나 method를 지정하는 방법도 있지만 아예 GET만 받거나 POST만 받는 어노테이션이 있습니다.

GET 방식만을 받아들이는 @GetMapping()

POST 방식만 받아들이는 @PostMapping() 이 그것입니다.

 

그리고 이렇게 method를 지정하지 않거나, @GetMapping() 또는 @PostMapping을 사용하는 때에는,

value 값만 지정하게 되는데 이럴때는

value="데이터" 의 형태가 아닌 ("데이터")의 형식으로 작성할 수 있습니다.

@RequestMapping(value="data")
@RequestMapping("data")

위의 두 코드는 같으니 되도록이면 가독성을 위해 간결하게 만드는 것이 좋겠습니다.

 

 

그리고 다음으로 볼것은

home 메서드의 return 값이 "home"으로 되어있고 @RequestMapping 의 value 는 "/" 입니다.

이렇게 둘의 값이 서로 다를 때에는 return값이 필요하지만

만약 이 둘의 값이 같다면 return은 생략할 수 있습니다.

아래는 예시 코드입니다.

@RequestMapping("data")
public void test(){}

이렇게 코드 작성시 return은 생략되었지만 "data"가 반환되는 것과 같습니다.

 

02. 컨트롤러를 만들어보자

이번에는 실제로 컨트롤러를 만들어보겠습니다.

클래스 파일을 만들때 주의해야할 것은 sevlet-context.xml에서 <base-package> 에 적혀있는 경로의 하위에 생성하지 않으면 이를 사용 할 수 없다는 것입니다.

그렇기 때문에 위에서 클래스는 com -> care -> cf 의 하위에 있는 member 패키지에 만들었습니다.

아래는 MemberController.java의 코드입니다.

package com.care.cf.member;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class MemberController {

	@RequestMapping ("index")
	public void index() {}

	@GetMapping("login")
	public void login() {
		System.out.println("로그인 페이지 처리");
	}

	@PostMapping("login")
	public String login(String id, String pw) {
		System.out.println("로그인 페이지에서 임력한 데이터를 받아서 처리");
		System.out.println("아이디 : " + id);
		System.out.println("비밀번호 : " + pw);

		
		if("admin".equals(id) && "1234".equals(pw)) {
			return "index";
		} 
		return "login";
		
	}
}

  여기서 살펴볼 것은 login() 이라는 메서드가 두개가 만들어져있다는 것입니다.

스프링에서도 자바와 마찬가지로 같은 이름의 메서드라 할지라도 매개변수의 종류, 갯수에 따라 서로 다른 기능을 줄 수 있습니다.

  그리고 볼것은 index() 메서드와 매개변수가 없는 login()은 어노테이션의 value가 "login"이고 반환하고자 하는 값도 "login" 이기 때문에 return이 생략되어 void인 반면, 매개변수가 들어가는 login() 메서드는 return 값이 "index"일 수 있기 때문에 String을 반환하며 return 값이 각각 지정되어있는 것을 확인할 수 있습니다.

  마지막으로 체크할 것은 컨트롤러 클래스임을 @Controller 어노테이션을 적용한 것 입니다.