1 minute read

클라이언트 접근가능 위치

<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