Spring2 - get/post
클라이언트 접근가능 위치
<body>
<%-- 현재 문서에 포함시킬 JSP 파일은 WEB-INF 디렉토리 내의 views 디렉토리 내에 위치해야한다. --%>
<%-- 상대 경로로 지정 --%>
<jsp:include page="inc/top.jsp"></jsp:include>
<h1>index.jsp</h1>
<%-- 이미지 표시하기 --%>
<%-- 클라이언트가 접근 가능한 디렉토리에 이미지 파일이 위치해야한다.(webapp/resources) --%>
<%-- 이미지, CSS 파일, 자바스크립트 파일 등 외부 접근 가능 자원은 모두 resources 에 위치한다. --%>
<%-- ${pageContext.request.contextPath } 경로 지정 시 컨텍스트 루트(webapp 디렉토리)를 가리킨다. --%>
<img src="${pageContext.request.contextPath }/resources/images/rabbit.png">
</body>
컨트롤러 GET, POST
@RequestMapping
@Controller
public class TestController {
@RequestMapping(value = "/main", method = RequestMethod.GET)
public String requestMain() {
return "main";
}
}
컨트롤러 역할을 수행하는 클래스 정의 시 어노테이션 @Controller를 클래스 선언부 윗줄에 지정해야 한다.
위는 “/main” 서블릿 주소 요청 시 자동으로 호출되는 requestMain() 메서드를 정의한 것이다. GET 방식 요청 시 “main.jsp” 페이지로 포워딩한다.
@Controller
public class TestController {
@RequestMapping(value = "/main", method = RequestMethod.POST)
public String requestMain() {
return "main";
}
}
POST방식 요청일 때의 메서드다. POST 방식을 지정했을 경우 GET 방식 요청 발생 시 일치하는 메서드가 없게 되므로 해당 요청을 처리할 수 없게 되며 오류가 발생한다. -> HTTP 상태 405 - 허용하지 않는 메서드(Request method ‘GET’ not supported)
@Controller
public class TestController {
@RequestMapping(value = "/main")
public String requestMain() {
return "main";
}
}
@RequestMapping 어노테이션에서 method 속성 생략 시 기본값은 GET으로 설정된다.
@Controller
public class TestController {
@GetMapping(value = "/test1")
public String test1() {
return "test/test1";
}
}
test 디렉토리의 test1.jsp 페이지로 포워딩(Dispatch)한다. views 디렉토리의 서브디렉토리를 포함해야할 경우 “서브디렉토리명/파일명”으로 지정하면 된다.
@Controller
public class TestController {
@RequestMapping(value = "/test2", method = {RequestMethod.GET, RequestMethod.POST})
public String test2() {
return "test/test2";
}
}
하나의 서블릿 주소로 서로 다른 요청 방식을 하나의 메서드에서 모두 처리할 경우 @RequestMapping 어노테이션을 사용하여 “/test2” 요청에 대해 GET/POST 방식을 모두 매핑하면 된다. method 속성에 중괄호{} 사용하여 GET, POST 방식을 모두 지정한다.
@GetMapping, @PostMapping
@Controller
public class TestController {
@GetMapping("/test2")
public String test2_get() {
return "test/test2";
}
@PostMapping("/test2")
public String test2_post() {
return "test/test2";
}
}
서블릿 주소가 동일하더라도 요청 방식이 다를 경우 각각 다른 메서드로 처리가 가능하다. @GetMapping 어노테이션을 사용하여 “GET 방식 요청 전용” 매핑 수행할 메서드를 정의할 수 있고 @PostMapping 어노테이션을 사용하여 “POST 방식 요청 전용” 매핑 수행할 메서드를 정의할 수 있다. 단일 파라미터일 경우 value 속성명은 생략 가능하다.
@RequestMapping을 사용한 방식과 완전히 동일하게 작동한다.
Leave a comment