티스토리 뷰

Chpater06. 요청 처리 메서드의 파라미터 유형 : 다양한 조건으로 검색한 도서 목록 출력하기

 

 

6.1 경로 변수와 @PathVariable

웹 요청 URL에 포함된 파라미터 값을 전달받는(=컨트롤러(전처리)) 경로 변수와 이를 처리하는 요청 처리 메서드와 매개변수에 선언하는 방식은 @PathVariable 애너테이션이 있다.

 

 

 

 

6.1.1 경로 변수의 개요

경로 변수( @PathVariable)는 웹 요청 URL에 포함된 파라미터 값을 전달받는데 사용하는 변수이다.

매핑 경로를 설정하는 @RequestMapping(단순화한 것들도 포함)에 중괄호를 사용하여 웹 요청 URL에 포함된 요청 조건 값을 전달받는다.

중괄호 안에 명시된 것이 경로 변수이며, 하나뿐만 아니라 여러개의 경로 변수를 포함할 수 있다.

 

 

 

* url 파라미터를 전달하는 방식은 두가지가 있다.

1. /cars?color=red

2. /cars/red

위의 두 가지 방법 모두 사용할 수 있다.

 

* @PathVariable 매개변수의 데이터 타입은 int, long, Date 등 어떤 타입이든 가능하다. 작성 후 스프링이 적절한 타입으로 자동 변환해 주기 때문이다.

 

 

 

 

6.1.2 @PathVariable을 이용한 경로 변수 처리

 

 @PathVariable 은 @RequestMapping에 설정된 경로 변수의 값을 요청 처리 메서드의 매개변수로 전달받는다.

//경로 변수 이름을 그대로 사용할때

	@RequestMapping("경로변수")
	public String requestMethod(@PathVariable 경로변수, ...) {
				...
	}
    

//경로 변수 이름을 재정의해서 사용할때

    	@GetMapping("경로변수")
		public String requestMethod(@PathVariable (경로변수) 매개변수, ...) {
					...
	}

 

사용자의 웹 요청 URL에 포함된 경로 변수의 값은 요청 처리 메서드의 매개변수 데이터타입에 맞게 자동으로 변환된다.

또한, 요청 메서드에 @PathVariable 이 선언된 매개변수는 여러 개 설정할 수 있다.

 

* @PathVariable에서의 경로변수와 @RequestMapping에서의 경로변수의 이름은 같아야 한다.

 

 

 

 

@PathVariable를 사용하여 경로 변수에 접근하는 예시

 

Example01Controller.java

package com.springmvc.chap06;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/home")
public class Example01Controller {
	
	@GetMapping("/exam01/{bookId}")
	public String requestMethod(@PathVariable String bookId, Model model) {
		System.out.println("도서 ID : " +bookId);
		model.addAttribute("data","도서 ID : " +bookId);
		return "webpage06";
	}
}

 

경로 변수 이름 bookId로 전달받고 요청 처리 메서드에서도 동일한 경로 변수 이름으로 전달받는다.

 

 

 

webpage06.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>chap06</title>
</head>
<body>
	<p>${data }
</body>
</html>

 

 

아래와 같이 url을 입력한다.

 

 

그럼 Example01Controller.java이 실행되어 경로변수 값이 저장되고 webpage06.jsp로 이동하여 다음과 같이 출력된다.

System.out.println을 사용하여 콘솔창에도 같이 출력되는 것을 볼 수 있다.

 

 

 

 

 

 

 

 

 

@PathVariable을 이용한 다중 경로 변수 접근

 

Example02Controller.java

package com.springmvc.chap06;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/home")
public class Example02Controller {
	@GetMapping("/exam02/{category}/publisher/{publisher}")
	public String requestMethod(@PathVariable String category, @PathVariable String publisher, Model model) {
		System.out.println("도서 분야 : " +category);
		System.out.println("출판사 : " +publisher);
		model.addAttribute("data","도서 분야 : " +category+ "<br>" + "출판사 : " +publisher );
		return "webpage06";
	}
}

 

아래와 같이 url을 입력한다.

 

 

 

 

 

 

 

 

 


 

6.2 매트릭스 변수와 @MatrixVariable

@MatrixVariable는 웹에서 들어오는 웹 요청 URL에 포함된 다중 파라미터 값을 전달받는 매트릭스 변수와 이를 처리하는 요청 처리 메서드의 매개변수에 선언한다.

 

 

 

6.2.1 매트릭스 변수의 개요

매트릭스 변수는 경로 변수와 마찬가지로 웹 요청 uRL에 포함된 파라미터 값을 전달받는데 사용된다.

세미콜론(;)으로 데이터를 구분하여 다중 데이터를 전달받는 것이 차이이다.

@RequestMapping의 경로 변수에 '매트릭스 변수 = 값' 형태로 사용하며 여기서 매트릭스 변수가 여러 개일 경우 color=red, green, blue 처럼 콤마(,)로 구분하거나 color=red;color=green;color=blue처럼 변수 이름을 반복하여 사용한다.

 

만약 웹 요청 url이 http://.../cars/car;color=red;year=2019라면 매트릭스 변수 color의 값은 red, year 값은 2019이다.

 

 

 

 

6.2.2 @MatrixVariable을 이용한 매트릭스 변수처리

@MatrixVariable 은 @RequestMapping에 설정된 경로 변수에 포함된 매트릭스 변수의 값을 요청처리 메서드ㅢㅇ 매개변수로 전달받는다.

 

 

 

 

✔ @MatrixVariable을 사용하려면 스프링 MVC 설정 파일인 servlet-context.xml에 아래와 같은 코드를 추가하여 작성해야한다.

   <annotation-driven enable-matrix-variables="true"/>

 

 

 

@MatrixVariable의 속성

속성 타입 설명
defaultValue String 기본값으로 대체하여 사용한다.
name String 매트릭스 변수의 이름이다.
pathVar String 하나 이상의 경로 구분(/)에 동일한 이름을 명확하게 구분하는데 사용한다.
매트릭스 변수가 있는 URL 경로 변수의 이름이다.
required boolean 매트릭스 변수가 요구되는지 여부를 설정한다.
value String 매트릭스 변수 'name=value'에서 name을 가리킨다.

 

 

 

 

 

 

 

@MatrixVariable을 이용한 매트릭스 변수 접근하는 예시

 

웹 요청 URL에 포함된 파라미터 값을 경로 변수 이름 bookId로 전달받아 요청 처리 메서드 requestMethod()에서 매트릭스 변수 category로 접근한다.

 

* ;는 Matrix를 구분하는 기호이다.

http://../home/exam03/ISBN1234;category=IT전문서 가 요청 url일 경우

http://../home/exam03/ISBN1234;category=IT전문서

;뒤에 있는 것이 파라미터 값이다.

 

* ISBN1234를 매핑으로 잡아야한다. (매핑할때 변수를 /앞에 있는걸로 사용)

package com.springmvc.chap06;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.MatrixVariable;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/home")
public class Example03Controller {
	
	@GetMapping("/exam03/{bookId}")
	public String requestMethod(@PathVariable String bookId, @MatrixVariable String category, Model model) {
		System.out.println("도서 ID : " +bookId);
		System.out.println("도서 분야 : " +category);
		model.addAttribute("data","도서 ID : " +bookId+ "<br>" + "도서 분야 : " +category);
		return "webpage06";
	}
}

 

아래와 같은 경로변수를 가지고 페이지를 이동하여 파라미터를 출력하는 것을 볼 수 있다.

 

 

 

 

 

@MatrixVariable에 value와 pathVar 속성 사용을 사용하는 예시

 

매트릭스 변수는 웹 요청 URL의 어느 곳에나 위치할 수 있으므로 어떤 매트릭스 변수를 어던 요소에 매핑할지 경정하려면 value와 pathVar 속성을 사용해야 한다.

http://.../home/exam04/ISBN1234;publisher=길벗/category/IT전문서;publisher=이지톡 이면 요청 처리 메서드 requestMethod()에서 첫번째 변수인 bookId에 publisher를 매핑하고 두번째 변수인 cateogry에 매트릭스 변수 publisher을 매핑한다.

접근된 매트릭스 변수는 각 q1(= 길벗 ), q2(= 이지톡 ) 로 재정의하여 사용하도록 코드를 작성했다.

 

 

http://.../home/exam04/ISBN1234;publisher=길벗/category/IT전문서;publisher=이지톡

위의 표기와 같이 /를 기준으로 나눈다.

 

package com.springmvc.chap06;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.MatrixVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/home")
public class Example04Controller {
	
	@GetMapping("/exam04/{bookId}/category/{category}")
	public String requestMethod(@MatrixVariable(value="publisher", pathVar="bookId")String q1, @MatrixVariable(value="publisher", pathVar="category")String q2, Model model) {
		System.out.println("출판사1 : " +q1);
		System.out.println("출판사2 : " +q2);
		model.addAttribute("data","출판사1 : "+q1+ "<br>" + "출판사2 : " +q2);
		return "webpage06";
	}
	
}

 

 

 

 

 

 

 

 

 

 

 


6.3 요청 파라미터와 @RequestParam

 

웹 요청 URL에 포함된 쿼리문을 처리하는 요청 처리 메서드의 파라미터에 사용하는 것은 @RequestParam 애너테이션이다.

 

 

 

 

6.3.1 요청 파라미터의 개요

요청 파라미터는 일반적인 웹 서버 애플리케이션의 GET 방식의 쿼리문 '변수명=값' 형태로 데이터를 전송한다. 웹 요청 url에 다중 쿼리문을 가지면 color=red&year=2019처럼 &로 구분하여 표현한다.

 

@RequestParam에서는 파라미터의 시작이 이전;와 다르게 ?로 표기한다.

? 뒤부터 파라미터가 시작된다는 뜻이다.  그러므로 http://.../cars?color=red 일 경우 color고 값은 red를 전달받는다.

 

 

 

 

6.3.2 @RequestParam을 이용한 요청 파라미터 처리

@RequestParam은 일반적으로 메서드의 매개변수에 설정하는데 기본값은 웹 요청 url로 전송하는 요청 파라미터 이름과 똑같이 설정한다.

이 요청 파라미터 값은 메서드 매개변수의 데이터 타입에 따라 적절하게 변환된다.

 

@RequestParam은 @RequestMapping의 요청 매핑 경로에 포함된 요청 파라미터 값을 요청 처리 메서드의 매개변수로 전달받는다.

 

//요청 파라미터를 그대로 사용할 때
@RequestMapping("요청 경로")
public String 메서드 이름(@RequestParam 요청 파라미터, ...) {
	...
}

//요청 파라미터를 재정의하여 사용할 때
@RequestMapping("요청 경로")
public String 메서드 이름(@RequestParam(요청 파라미터) 매개변수, ...){
	...
}

 

 

@RequestParam의 속성

옵션 요소 타입 설명
defaultValue String 요청 매개변수가 없거나 빈 값이면 기본값으로 대체하여 사용한다.
name String 저달하는 요청 매개변수의 이름이다.
required boolean 요청 매개변수가 요구되는지 여부를 설정한다.
value String name()에 대한 별칭이다.

 

이때 웹 요청 URL이 http://.../home/exam07?/id=ISBN1234 이면 요청 파라미터는 id=ISBN1234을 requestMethod() 메서드의 매개변수 id의 값은 ISBN1234를 전달받는다.

 

 

* @GetMapping("경로변수")의 변수 이름과 @RequestParam 요청 파라미터의  이름이 다르면 작동되지 않는다.

이름 다르면 이전 보았던 예시와 같이 (" ")해서 지정해야 된다.

 

 

이전 예시 p.155

@GetMapping("/{category}")
public String requestBooksByCategory(@PathWariable("category") String bookCategory, Model model){
	...
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday