[Spring] Controller 컨트롤러 #RequestMapping
- 웹/Spring
- 2021. 8. 9.
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";
}
'웹 > Spring' 카테고리의 다른 글
[Spring] Controller 컨트롤러 #Model (0) | 2021.08.11 |
---|---|
[Spring] Controller 컨트롤러의 파라미터 수집기능 (0) | 2021.08.10 |
[Spring] log4j 로그를 효율적으로 사용 (0) | 2021.08.06 |
[Spring] lombok - VO 클래스를 간단하게 (설치시 에러해결) (0) | 2021.08.05 |
[Spring] JUnit5 반복 테스트 (0) | 2021.08.04 |