서버에 전송되는 값을 요청 파라미터(request Parameter)라고함.
요청 파라미터 | 내용 |
---|---|
요청 쿼리 스트링(query string)으로 보내지는 값 HTTP 메서드 : GET으로 서버로 데이터 전송 요청 본문(body)에 저장되어 보내지는 값 HTTP 메서드 : POST로 서버로 데이터 전송 | 뷰에서 입력값 및 선택한 값이나 숨김 파라미터(hiidden parameter)등에서 미리 뷰에 입력해준 값 등 |
뷰에서 클릭한 버튼의 name 속성값 | 하나의 뷰에 버튼이 여러 개 있을 때 어느 버튼인지 판변할 수 있는 값 |
URL 경로(path)의 일부로 보내지는 값 | 링크 등으로 URL의 일부로 보내지는 값 |
방법 | 내용 |
---|---|
@RequestParam 사용 | @RequestParam 어노테이션을 이용해 파라미터를 하나씩 취득 |
Form 클래스 사용 (따로 만들어야함) | 스프링 MVC가 Form클래스 내의 필드에 대해 값을 저장. 요청 파라미터를 모아서 하나의 객체로 받아들이기 때문에 자주 사용되는 방법. 받을 때는 '형변환'이나 포맷지정이 가능 |
링크 등 URL의 일부로 포함된 값을 취득할 떄는 요청 매핑 어노테이션의 value 속성에 값이 저장된 경로를 지정하고 요청 핸들러 메서드의 인수에 @PathVariable 어노테이션과 값을 저장할 인수를 지정함.
@Controller
public class RequestParamController {
//입력 화면을 표시
@GetMapping("show")
public String showView(){
//반환값으로 뷰 이름을 돌려줌
return "entry";
}
<body>
<form th:action="@{/confirm}" method="post">
<div>
<label for="name">이름 : </label>
<input type="text" name = "name">
</div>
<div>
<label for="age">나이 : </label>
<input type="number" name="age" min="1" max="100">
</div>
<div>
<label for="birth">생년월일 : </label>
<input type="date" name="birth">
</div>
<input type="submit" value="전송">
</form>
</body>
타임리프를 사용한다고 선언을 하고 th:action="@{/confirm}"은 URL로 보낸다는 뜻
//확인 화면을 표시
@PostMapping("confirm")
public String confirmView(
Model model, @RequestParam String name, @RequestParam Integer age,
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) @RequestParam LocalDate birth
){
//Model에 저장
model.addAttribute("name",name);
model.addAttribute("age", age);
model.addAttribute("birth", birth);
//반환값으로 뷰 이름을 돌려줌
return "confirm";
<body>
<ul>
<li>이름 : [[${name}]]</li>
<li>나이 : [[${age}]]</li>
<li>생년월일 : [[${birth}]]</li>
</ul>
</body>
@Data
public class Form {
private String name;
private Integer age;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
private LocalDate birth;
}
//확인 화면을 표시 : Form 클래스용
@PostMapping("confirm")
public String confirmView(Form f){
//반환 값으로 뷰이름을 돌려줌
return "confirm2";
}
<body>
<ul>
<li>이름 : [[${form.name}]]</li>
<li>나이 : [[${form.age}]]</li>
<li>생년월일 : [[${form.birth}]]</li>
</ul>
</body>
@Controller
public class PathVariableController {
//화면 표시
@GetMapping("show")
public String showView(){
//반환값으로 뷰 이름을 돌려줌
return "show";
}
}
<div>
<!--URL에 값 넣기-->
<h3><a href="@{/function/1}">기능-1</a></h3>
<h3><a href="@{/function/2}">기능-2</a></h3>
<h3><a href="@{/function/3}">기능-3</a></h3>
<!--같은 form태그 안에 포함된 여러 개의 버튼-->
<form action="@{/send}" method="post">
<input type="submit" value="버튼A" name="a">
<input type="submit" value="버튼B" name="b">
<input type="submit" value="버튼C" name="c">
</form>
</div>
//링크처리
@GetMapping("/function/{no}")
public String selectFunction(@PathVariable Integer no){
//뷰 이름 초기화
String view = null;
switch (no){
case 1 :
view = "pathvariable/function1";
break;
case 2 :
view = "pathvariable/function2";
break;
case 3 :
view = "pathvariable/function3";
break;
}
//반환값으로 뷰 이름을 돌려줌
return view;
}
<head>
<meta charset="UTF-8">
<title>기능 n</title>
</head>
<body>
<h1>기능 n의 화면</h1>
</body>