

@Controller 가 적용된 클래스
@RequestMapping 을 이용해 요청 URL 및 요청 메소드 파악
메소드 단위로 요청을 처리
메소드는 결과를 출력할 뷰 이름을 반환
@RequestMapping
요청 URL 과 요청 메소드를 인식할 수 있는 Annotation
요청 메소드에 따라서 @GetMapping, @PostMapping 등으로 변경할 수 있음(spring 4 이상)
value
@RequestMapping(value="/") "/" 요청
@RequestMapping(value={"/", "index"}) "/"와 "index" 요청
@RequestMapping(value="/member/*.do") "/member" 로 시작하고 ".do" 로 끝나는 요청
method
@RequestMapping(method=RequestMethod.GET) GET 방식(조회)
@RequestMapping(method=RequestMethod.POST) POST 방식(삽입)
@RequestMapping(method=RequestMethod.PUT) PUT 방식(수정)
@RequestMapping(method=RequestMethod.DELETE) DELETE 방식(삭제)
contenttype
@RequestMapping(consumes="application/json") 요청 컨텐트가 JSON 임
@RequestMapping(produces="application/json") 응답 컨텐트가 JSON 임
@Controller // 컨트롤러를 만드는 Annotation
public class MyController01 {
/*
* 요청/응답을 처리할 메소드를 만든다.
* 1. 반환타입
* 1) String : 응답할 Jsp의 이름을 반환한다.
* 2) void : 컨트롤러가 호출한 서비스에서 직접 응답한다. 요청 주소를 Jsp 이름으로 인식한다.
* 3) 기타 : 비동기 통신에서 데이터를 응답한다.
* 2. 메소드명
* - 아무 일도 안 한다.(임의로 작성가능)
* 3. 매개변수
* 1) HttpServletRequest를 선언해서 사용할 수 있다.
* 2) HttpServletResponse를 선언해서 사용할 수 있다.
* 3) Model을 선언해서 forward할 정보를 저장할 수 있다.
* 4) HttpSession을 선언해서 사용할 수 있다.
* 4. 요청(@RequestMapping)
* 1) 메소드 : GET, POST
* 2) URL : 요청 주소
*/
// value="/" : contextPath 요청을 의미한다. http://localhost/app03/ 주소를 의미한다.
@RequestMapping(value = {"/", "/index.do"} method = RequestMethod.GET)
public String welcome() {
// ViewResolver의 prefix : /WEB-INF/views/
// ViewResolver의 suffix : .jsp
return "index";
}
}
spring 설정 정보가 들어있는 servlet-context.xml
<!--
<resources> 태그(추가,변경가능)
정적 자원(css, js, image 등)의 경로와 주소를 관리하는 태그
mapping="/resources/**" : 주소(URL)가 /resources로 시작하는 경우
location="/resources/" : /resources/ 디렉터리로 연결하시오.
-->
<resources mapping="/resources/**" location="/resources/" />
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
에 작성된 ViewResolver를 통해 views/모든 jsp에 대한 요청 Mapping이 처리된다.
이로인해 views/.jsp 요청에서 파일명만 return 하게 된다.
정확히는 HandlerAdapter 에 의해서 반환된 ModelAndView 객체에 저장된 뷰 정보를 처리함
아래의 경우에서
// 요청 주소
@RequestMapping(value = "/board/list.do", method = RequestMethod.GET)
public String boardList() {
// ViewResolver의 prefix : /WEB-INF/views/
// ViewResolver의 suffix : .jsp
return "board/list"; // /WEB-INF/views/board/list.jsp
// jsp 경로
}
실제 프로젝트 구조에서의 위치는 그림과 같다.

외부에서 구조를 파악하기 어렵게 하기 위해서 요청 주소를 a/b/c/d/list.do처럼 꼬아놓는 경우도 있다.
Spring 4 버전 이후 사용 가능한 @RequestMapping
1. @GetMapping : @RequestMapping(method = RequestMethod.GET) 을 생략할 수 있다.
2. @PostMapping : @RequestMapping(method = RequestMethod.POST)을 생략할 수 있다.
@Controller
public class MyController02 {
// @PostMapping(value = "/board/list.do")과 다른 요청이다.
@GetMapping(value = "/board/list.do")
public String boardList() {
// ViewResolver의 prefix : /WEB-INF/views/
// ViewResolver의 suffix : .jsp
return "board/list"; // /WEB-INF/views/board/list.jsp
}
반환이 없는 경우에는 요청 주소를 Jsp 경로로 인식한다.
/member/list.do 요청을 /member/list.jsp 경로로 인식한다.(.do가 생략되도 같은 결과)
@GetMapping(value = "/member/list.do")
public void memberList() {
// 본문없음
}
}