Spring Param 전송
본 포스팅은 KTDS Consotium에서 배운 내용을 포스팅하였습니다.
문제가 있을 경우 바로 비공개 혹은 삭제처리하겠습니다.
2015-04-20
파라미터를 전송 받는 방법은 크게 4가지로 나뉩니다.
1. PathVariable(URL param) : URL를 통해서 데이터를 전송받는 방법입니다.
2. HttpServletRequest param : HttpServletRequest의 request 객체를 이용하여 데이터를 전송받는 방법입니다.
3. @RequestMapping param : HttpServlet과 비슷하게 request객체를 이용하는것 처럼 보이지만, 이 방법은 애노테이션(@)를 이용하여 데이터를 전송받는 방법입니다.
4. Command object param : command 객체를 이용하여 데이터를 전송받는 방법입니다. 이 방법은 클래스 객체를 통해 데이터를 지정하고, 이를 전송 받게 됩니다.
대표적인 4가지의 파라미터가 존재합니다. 이에 대해서 설명합니다.
1. PathVariable(URL param)

PathVariable는 상위 그림과 같이 URL에 직접 전송될 데이터를 적음으로써 데이터가 전송됩니다.
예를 들어 HelloK라는 데이터를 전송할 경우
이렇게 적을 경우 되면 실제 Html Document 출력에서는 HelloK라는 데이터를 전송 받을 수 있습니다.
실제 ModelAndView의 소스는 아래와 같습니다.
패키지 import 및 클래스 이름은 소스에서 생략합니다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
/** * 실무에서 표준이 되다 싶은 파라미터 전송 방법.* URL에 직접 Id를 요청함으로써 파라미터를 전송할 수 있음* @param paramId * @return 뷰 */@RequestMapping("/params/{paramId}")public ModelAndView exampleOf_URIParam(@PathVariable String paramId) { ModelAndView view = new ModelAndView(); view.setViewName("/paramViewOne"); view.addObject("welcomeMessage", paramId + "님 환영합니다."); return paramViewOne;} |
2. HttpServletRequest param
HttpServletRequest는 상위 그림과 같이 Param Key값과 Value를 전달하면
request.getParameter(“id); 코딩을 통해 전송된 파라미터를 받을 수 있습니다.
request는 GET method 및 POST method을 통해서 데이터를 전송받을 수 있으며, 명시를 하지 않는 이상
Default는 POST 혹은 GET method로 데이터를 전송 받을 수 있습니다.
가령 상위 예제를 get method로 받는다고 할 때
혹은 post method로 받는다고 할 때
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<form name="exampleTransmitForm" id="exampleTransmitForm" method="post" <input type="hidden" name="id" value="kth"/> <input type="submit" id="btnSubmit" value="전송!"/></form> |
프로그램에서 받을 때에는 String id = request.getParameter(“id); 로 받으면 되겠습니다.
(예제에는 파라미터를 1개만 넘겨줬지만 실제로는 1개 이상의 다수의 파라미터를 전송하는것이 가능합니다.)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
/** * HttpServletRequest 파라메터를 이용하여 직접 id를 얻는 방법. get/post가능 * @param request * @return paramViewTwo */@RequestMapping("/ExHttpServlet")public ModelAndView exampleOf_HttpServletRequest(HttpServletRequest request) { String id = request.getParameter("id"); ModelAndView view = new ModelAndView(); view.setViewName("/paramViewTwo"); view.addObject("userId", id); return view;}/** * HttpServletRequest 파라메터를 이용하여 직접 id를 얻는 방법. GET만가능 * @param request * @return paramViewTwo */@RequestMapping(value="/paramHttpServletRequestGet", method=RequestMethod.GET)public ModelAndView exampleOf_HttpServletRequestGet(HttpServletRequest request) { String id = request.getParameter("id"); ModelAndView view = new ModelAndView(); view.setViewName("/paramViewTwo"); view.addObject("userId", id); return view;}/** * HttpServletRequest 파라메터를 이용하여 직접 id를 얻는 방법. POST만만가능 * @param request * @return paramViewTwo */@RequestMapping(value="/paramHttpServletRequestPOST", method=RequestMethod.POST)public ModelAndView exampleOf_HttpServletRequestPOST(HttpServletRequest request) { String id = request.getParameter("id"); ModelAndView view = new ModelAndView(); view.setViewName("/paramViewTwo"); view.addObject("userId", id); return view;} |
3. RequestMapping param
RequestMapping param은 상위 그림과 같이 Param Key값과 Value를 전달하면
전달된 파라미터를 그대로 받을 수 있습니다.
가령, @RequestParam(“id”) String id, @RequestParam(“pwd”)일 경우
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<form name="exampleTransmitForm" id="exampleTransmitForm" method="post" <input type="hidden" name="id" value="kth"/> <input type="hidden" name="pwd" value="1234"/> <input type="submit" id="btnSubmit" value="전송!"/></form> |
String myId = id;
String myPwd = pwd; 로 받을 수 있습니다.
GET method 및 POST method을 통해서 데이터를 전송받을 수 있으며, 명시를 하지 않는 이상
Default는 POST 혹은 GET method로 데이터를 전송 받을 수 있습니다.
(1개 이상의 다수의 파라미터를 전송하는것이 가능합니다.)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
/** * RequestParam 어노테이션을 이용하여 직접 id를 얻는 방법. get/post가능 * @return paramViewTwo */@RequestMapping("/exampleOf_RequestParam")public ModelAndView exampleOf_RequestParam(@RequestParam("id") String id) { ModelAndView view = new ModelAndView(); view.setViewName("/paramViewTwo"); view.addObject("userId", id); return view;}/** * RequestParam어노테이션을 이용하여 직접 id pwd를 얻는 방법. POST만 가능 * @return paramViewTwo */@RequestMapping(value="/exampleOf_RequestParamPost", method=RequestMethod.POST)public ModelAndView exampleOf_RequestParamPost(@RequestParam("id") String id ,@RequestParam("pwd") String pwd) { ModelAndView view = new ModelAndView(); view.setViewName("/paramViewTwo"); view.addObject("userId", id); view.addObject("pwd", pwd); return view;}/** * RequestParam 어노테이션을 이용하여 직접 id를 얻는 방법. GET만 가능 * @return paramViewTwo */@RequestMapping(value="/exampleOf_RequestParamGet", method=RequestMethod.POST)public ModelAndView exampleOf_RequestParamGet(@RequestParam("id") String id ,@RequestParam("pwd") String pwd) { ModelAndView view = new ModelAndView(); view.setViewName("/paramViewTwo"); view.addObject("userId", id); view.addObject("pwd", pwd); return view;} |
4. Command object param
Command object param은 상위 그림과 같이 객체(object)에 데이터를 넣어 전송됩니다.
사용자가 email, name, 패스워드에 대한 데이터를 전송할 경우
MemberVO 객체에 데이터를 넣고 전송합니다.
객체를 전달하기 위해서는 SpringFramework에서 제공하는 form 테그를 이용합니다.
(이 SpringFramework는 객체 Validation check를 지원하기 때문에 사용하였습니다.>
테그라이브러리 부가적 요구사항
- <%@ taglib prefix=”form” uri=”http://www.springframework.org/tags/form” %>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<form:form commandName="memberRegisterVO"method="post"email:<input type="text" name="email" value="${memberRegisterVO.email }"/>name:<input type="text" name="name" value="${memberRegisterVO.name}"/>password:<input type="text" name="password" value="${memberRegisterVO.password }"/>confirmPassword:<input type="text" name="confirmPassword"value="${memberRegisterVO.confirmPassword }"/><input type="submit" id="btnSubmit" value="전송!"/></form:form> |
<commandName은 VO클래스의 이름입니다. 관례로 이름은 같게 적습니다. 가령 MemberRegisterVO는 memberRegisterVO로 적습니다.>
(2015-04-24)
Command객체는 <form> 테그로 전송해도 됩니다.
다만 받을 때 객체의 name은 Command 객체의 name과 동일해야 들어갑니다.
예를 들어
class MemberVO {
private String name;
private String pwd;
}
일 경우 form테그에 전송되는 데이터는
<form>
<input type=”text” name=”name”/>
<input type=”text” name=”pwd”/>
</form>
로 클래스의 멤버변수는 name과 동일하게 해야 합니다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//실제 데이터를 전송하기 위한 폼을 보여주려는 뷰@RequestMapping("/transmitDataEx03") public ModelAndView transmitDataViewThree() { ModelAndView view = new ModelAndView(); view.setViewName("/transmitDataToCommandObject"); return view; }/** * Command 객체를 이용해 폼 전송 처리 * @param id * @return paramViewThree */ @RequestMapping(value="/paramHttpServletRequest3", method=RequestMethod.POST) public ModelAndView exampleOf_CommandParam(MemberRegisterRequestVO memberRegisterVO) { ModelAndView view = new ModelAndView(); view.addObject("memberRegisterVO", memberRegisterVO); view.setViewName("/paramViewThree"); return view; } |
5. Command object Validation Check
사용자는 email, name, 패스워드에 대한 필드를 모두 채우지 않고 등록를 합니다.
이는 Null Point Exception 등 보안에 대해서 해킹을 당할 수 있기 때문에 Validation Check은 필수입니다.
Command객체에 대해서 Validation Check를 하기 위해서는 아래와 같은 패키지를 요구합니다.
pom.xml
- hibernate-validator
스프링에서는 아래와 같은 Validation Check을 제공합니다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
@RequestMapping(value="/paramHttpServletRequestValidChk", method=RequestMethod.POST) public ModelAndView exampleOf_CommandParamValidCheck( @Valid MemberRegisterRequestVO memberRegisterVO, Errors errors) { ModelAndView view = new ModelAndView(); if(errors.hasErrors()){ //에러가 생겻을 경우, 처리. System.out.println(errors.getAllErrors()); System.out.println("error"); view.setViewName("/transmitDataToCommandObject"); view.addObject("memberRegisterVO", memberRegisterVO); return view; } else { view.setViewName("/paramViewThree"); // /view/paramViewThree.jsp view.addObject("memberRegisterVO", memberRegisterVO); return view; } }//paramViewThree.jsp<form:form commandName="memberRegisterRequestVO" method="post" action="/ExampleOfParamTransmit/paramHttpServletRequestValidChk"><table><tr><td>email:</td><td> <input type="text" name="email" value="${memberRegisterVO.email }"/> <form:errors path="email"></form:errors></td></tr><tr><td>name:</td><td> <input type="text" name="name" value="${memberRegisterVO.name}"/> <form:errors path="name"></form:errors></td></tr><tr><td>password:</td><td> <input type="password" name="password" value="${memberRegisterVO.password }"/> <form:errors path="password"></form:errors></td></tr><tr><td>confirmPassword:</td><td> <input type="password" name="confirmPassword" value="${memberRegisterVO.confirmPassword }"/> <form:errors path="confirmPassword"></form:errors></td></tr></table><input type="submit" value="전송!"/></form:form> |
실행 화면 ㅋㅋ
소스의 탭이 안 맞쳐져있는 것은 기분탓입니다.
아래 예제에서 받아가주세염.~
예제
https://github.com/taehun3718/SpringPractice/tree/master/ExampleOfParamTransmit





