- 클라이언트 요청 발생 시 전달하는 파라미터 데이터를 손쉽게 주입받을 수 있도록 다양한 방식을 제공하고 있음
- Spring MVC는 Servlet/JSP처럼 요청 방식에 따라 파라미터 추출하는 방식이 달라지지 않음(코드 동일)
HttpServletRequest사용하기
- SpringMVC는 필요한 객체나 데이터를 주입 받아 사용
- Servlet/JSP에서 파라미터 데이터를 추출할 때 HttpServletRequest객체를 통하게 되는데,
- Spring MVC에서 이 객체를 주입 받아 사용할 수 있음
- 파라미터 추출 뿐 아니라 HttpServletRequest객체가 필요한 경우 사용하면 됨
예제
1. index.jsp생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href='test1?data1=100&data2=200&data3=300&data3=400'>test1 get</a><br/>
<hr/>
<form action='test2' method='post'>
data1 : <input type='text' name='data1'/><br/>
data2 : <input type='text' name='data2'/><br/>
data3 : <input type='checkbox' name='data3' value='100'/>data3 100
<input type='checkbox' name='data3' value='200'/>data3 200<br/>
<button type='submit'>test2 post</button>
</form>
</body>
</html>
2-1. TestController 생성 (Get방식일 때)
@Controller
public class TestController {
@GetMapping("/test1") //≪
public String test1(HttpServletRequest request) { //≪
String data1 = request.getParameter("data1");
String data2 = request.getParameter("data2");
String [] data3 = request.getParameterValues("data3");
System.out.println("data1 : " + data1);
System.out.println("data2 : " + data2);
for(String str1 : data3) {
System.out.println("data3 : " + str1);
}
return "result";
}
-Servlet/JSP에서 어떠한 요청이 발생하면, 해당 요청에 관련된 정보는 전부 HttpServletRequest에 담긴다.
-이 HttpServletRequest객체를 통해 파라미터를 추출한다.
-request.getParameterValues(); : 위의 jsp에서 파라미터를 data3이라는 이름으로 파라미터를 여러개 보냄
-<a href='test1?data1=100&data2=200&data3=300&data3=400'>test1 get</a>
2-2. TestController 생성 (Post방식일 때)
@Controller
public class TestController {
@PostMapping("/test2") //≪
public String test2(HttpServletRequest request) { //≪
String data1 = request.getParameter("data1");
String data2 = request.getParameter("data2");
String [] data3 = request.getParameterValues("data3");
System.out.println("data1 : " + data1);
System.out.println("data2 : " + data2);
if(data3 != null) {
for(String str1 : data3) {
System.out.println("data3 : " + str1);
}
}
return "result";
}
}
-Get방식일 때와 Post방식일 때 파라미터를 추출하는 방식이 동일하다는 것을 확인 가능!
WebRequest 사용하기
- WebRequest는 HttpServletRequest 클래스를 확장한 클래스이다.
- 사용방법은 HttpServletRequest와 동일
- HttpServletRequest보다 기능이 약간 더 많음
예제
1. index.jsp생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr/>
<a href='test3?data1=100&data2=200&data3=300&data3=400'>test3</a><br/>
</body>
</html>
2. TestController 생성 (Get방식일 때) - Post와 방식 동일
@Controller
public class TestController {
@GetMapping("/test3")
public String test3(WebRequest request) { //≪
String data1 = request.getParameter("data1");
String data2 = request.getParameter("data2");
String [] data3 = request.getParameterValues("data3");
System.out.println("data1 : " + data1);
System.out.println("data2 : " + data2);
for(String str1 : data3) {
System.out.println("data3 : " + str1);
}
return "result";
}
}
@PathVariable사용하기
- 데이터가 요청 주소에 있을 경우 값을 주입받을 수 있는 어노테이션
- Restful API 서버 프로그래밍 시 많이 사용하는 방식
- 파라미터의 이름이 아니라, 순서를 가지고 추출함
- 요청주소/값1/값2/값3
예제
1. index.jsp생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr/>
<a href='test4/100/200/300'>test4</a><br/>
</body>
</html>
2. TestController 생성
@Controller
public class TestController {
@GetMapping("/test4/{data1}/{data2}/{data3}") //≪
public String test4(@PathVariable int data1, //≪
@PathVariable int data2, //≪
@PathVariable int data3) { //≪
System.out.println("data1 : " + data1);
System.out.println("data2 : " + data2);
System.out.println("data3 : " + data3);
int add = data1 + data2 + data3;
System.out.println("add : " + add);
return "result";
}
}
RequestParam사용하기
- 파라미터 데이터를 직접 주입 받을 수 있음
- 지정된 변수의 이름과 파라미터의 이름이 같은 경우 값을 주입받음
- 가능한 경우 형 변환도 처리해줌
- value : 파라미터의 이름과 변수의 이름이 다를 경우 파라미터 이름을 지정한다.(대부분 동일하게 함)
- required : false를 설정하면 지정된 이름의 파라미터가 없을 경우 null이 주입된다.
예제
1. index.jsp생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<hr/>
<a href='test5?data1=100&data2=200&data3=300&data3=400'>test5</a><br/>
</body>
</html>
2. TestController 생성
@Controller
public class TestController {
@GetMapping("/test6")
public String test6(@RequestParam(value = "data1") int value1, //≪
@RequestParam(value = "data2") int value2, //≪
@RequestParam(value = "data3") int [] value3) { //≪
System.out.println("data1 : " + value1);
System.out.println("data2 : " + value2);
for(int a1 : value3) {
System.out.println("data3 : " + a1);
}
return "result";
}
}
또는 이름이 동일할 시 value 사용하지 않음
@Controller
public class TestController {
@GetMapping("/test7")
public String test7(@RequestParam int data1, //≪
@RequestParam (required = false) String data2, //≪
@RequestParam (defaultValue = "0") int data3) { //≪
System.out.println("data1 : " + data1);
System.out.println("data2 : " + data2);
System.out.println("data3 : " + data3);
return "result";
}
}
'SPRING' 카테고리의 다른 글
[SPRING] View Resolver 뷰리졸버 (0) | 2021.07.19 |
---|---|
[SPRING] 객체로 파라미터 주입 받기 (0) | 2021.07.19 |
[SPRING] 요청 방식 (0) | 2021.07.19 |
[SPRING] URL MAPPING (0) | 2021.07.19 |
[SPRING] Spring 프로젝트 세팅하기 (0) | 2021.07.19 |
댓글