[Spring] Controller 컨트롤러 #RequestMapping

Spring

 

Spring Controller


JSP의 복잡했던 절차들을 많이 생략한 방식으로 웹 서버 구현 가능

컨트롤러에서는 데이터를 attribute에 싣고 다음 페이지로 안내하는 작업만 하는 것이 바람직하다.

다양한 방식의 매개변수와 리턴 타입을 사용할 수 있다.

GET/POST 등 Method별로 별도의 처리도 어노테이션으로 간편하게 처리 가능하다.

클래스 위에 @Controller어노테이션을 달아놓으면 스프링이 알아서 수집한다.

 

@RequestMapping


사용자의 요청 URL과 해당 컨트롤러를 매핑시키는 어노테이션

클래스메서드 위에 사용할 수 있다.

    - value : 매핑할 URL을 설정한다
      어노테이션 뒤에 아무런 속성을 정의하지 않으면 기본값이 된다.

    - method : 요청 방식을 구분할 수 있다.
      @GetMapping, @PostMapping 등으로 메서드 선택을 간편화 할 수 있다.


클래스 위에 사용한 경우

클래스 내부에 있는 메서드와 요청 URL 매핑을 시켜줄 때 앞에 /hello/ 를 생략할 수 있다.
클래스에 매핑이 설정되어 있으면 void메서드와 리턴이 있는 메서드가 호출하는 view의 경로는 달라진다.

void

/WEB-INF/views/hello/abc.jsp 

String

/WEB-INF/views/abc.jsp

// 클래스에 정의한 경우 내부의 메소드들은 요청 URL 매핑시 /hello/를 생략해도 자동으로 매핑시켜준다.
@RequestMapping("/hello/*")
public class TestController {

  // URL = /home/ 뒤에 정의되지 않은 모든 URL
  // Page = /WEB-INF/views/home.jsp
  @RequestMapping(value = "*", method = RequestMethod.GET)
  public String home() {
      return "home";
  }

  // URL = /home/abc
  // Page = /WEB-INF/views/abc.jsp
  @RequestMapping(value = "abc", method = RequestMethod.GET)
  public String abc() {
      return "abc";
  }

  // URL = /home/abc
  // Page = /WEB-INF/views/home/abc.jsp
  @RequestMapping(value = "abc", method = RequestMethod.GET)
  public void abc() {}
}





컨트롤러의 리턴 타입


사용자의 요청 URL의 매핑된 클래스나 메서드를 찾았다면 작업을 끝낸 후 사용자에게 보일 view페이지를 리턴해주어야 한다.
리턴할 때에는 두 가지 경우가 있는데 view(페이지)를 찾을 경우와 view 이외의 것(페이지 이외)을 리턴할 경우가 있다.

1. view를 찾을 경우
    - DispatcherServlet은 컨트롤러의 리턴값을 통해 알맞은 뷰를 찾게끔 만들어져 있다.

void
요청하는 URI로 /WEB-INF/views/ 에서 동일한 경로상의 jsp를 찾는다.   

	@RequestMapping("/")
	public void home() {}

예를 들어 / 를 요청하면 /WEB-INF/views/home.jsp 를 호출한다.
※ 단 클래스에 매핑이 적용되어있을 경우 자동으로 클래스에 매핑된 URL이 적용된 경로에서 페이지를 찾는다.
   EX > 요청 URL이 /hello/home 인 경우 /WEB-INF/views/hello/home.jsp을 호출한다.


String
리턴한 문자열 경로로 /WEB-INF/viwes/에서 view를 찾는다.
리턴할 페이지의 문자열 앞에 redirect:을 붙이면 redirect 한다.

	@RequestMapping("/")
	public String home() {
		return "home";
	}

위의 void메서드와 같은 기능을 한다. 
※ 단 클래스에 매핑이 적용되어 있어도 클래스에 매핑된 URL과는 상관없이 /WEB-INF/views/home.jsp를 호출한다.
   다른 경로에 존재하는 페이지를 호출하고 싶다면 /views/ 아래의 모든 경로를 작성해주어야 한다.
   EX  > /WEB-INF/views/hello/home.jsp를 호출하고 싶다면 return "/hello/home"을 해주어야 한다.


redirect
리턴할 때 앞에 redirect:를 붙인다. 

	@RequestMapping("/")
	public String home() {
		return "redirect:/home";
	}

 

댓글

Designed by JB FACTORY