Spring에서 파라미터 전송

2018.01.17 15:53

졸리운_곰 조회 수:101

 

Spring에서 파라미터 전송

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)

1__PathVariable

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

2__HttpServletRequest

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

3__RequestMapping

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

4__Command_object

Command object param은 상위 그림과 같이 객체(object)에 데이터를 넣어 전송됩니다.

사용자가 email, name, 패스워드에 대한 데이터를 전송할 경우

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

MemberVO 객체에 데이터를 넣고 전송합니다.

객체를 전달하기 위해서는 SpringFramework에서 제공하는 form 테그를 이용합니다.

(이 SpringFramework는 객체 Validation check를 지원하기 때문에 사용하였습니다.>

테그라이브러리 부가적 요구사항

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>

실행 화면 ㅋㅋ

validationCheck

소스의 탭이 안 맞쳐져있는 것은 기분탓입니다.

아래 예제에서 받아가주세염.~

예제

https://github.com/taehun3718/SpringPractice/tree/master/ExampleOfParamTransmit

 

[출처] https://taehun3718.wordpress.com/2015/04/20/spring%EC%97%90%EC%84%9C-%ED%8C%8C%EB%9D%BC%EB%AF%B8%ED%84%B0-%EC%A0%84%EC%86%A1/

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
66 스프링(Spring) 개발 - (6) 프로젝트 생성 및 개발 시작 file 졸리운_곰 2018.01.17 61
65 스프링(Spring) 개발 - (5) 스프링 기본 프로젝트 분석 file 졸리운_곰 2018.01.17 75
64 스프링(Spring) 개발 - (4) 스프링 프로젝트 생성하기 file 졸리운_곰 2018.01.17 70
63 스프링(Spring) 개발 - (3) 개발환경 구성하기 - 이클립스 플러그인 설치(3/3) file 졸리운_곰 2018.01.17 95
62 스프링(Spring) 개발 - (2) 개발환경 구성하기 [Eclipse+Maven+SVN] (2/3) file 졸리운_곰 2018.01.17 49
61 스프링(Spring) 개발 - (1) 개발환경 구성하기 [Eclipse+Maven+SVN] (1/3) file 졸리운_곰 2018.01.17 69
» Spring에서 파라미터 전송 file 졸리운_곰 2018.01.17 101
59 View 데이터의 Controller 전달 방법 졸리운_곰 2018.01.17 52
58 전자정부프레임워크(Spring) 값 주고 받는 3가지 방법 졸리운_곰 2018.01.17 59
57 iBatis 와 MyBatis 차이점 iBatis -> MyBatis 졸리운_곰 2018.01.16 288
56 전자정부 프레임워크 구조 샘플 프로젝트 구조(Service 및 Dao)(4) file 졸리운_곰 2018.01.12 124
55 전자정부 프레임워크 구조 샘플 프로젝트 구조(Controller)(3) file 졸리운_곰 2018.01.12 275
54  전자정부 프레임워크(eGovframe) 동적 웹프로젝트 시작하기(2) file 졸리운_곰 2018.01.12 73
53 전자정부 프레임워크(egov framework) 설치하기(1) file 졸리운_곰 2018.01.12 165
52 01. 전자정부 표준 프레임워크는 무엇? file 졸리운_곰 2018.01.12 125
51 전자정부 표준프레임워크 eGov : 실행환경 템플릿 및 예제 테이블정의서 file 졸리운_곰 2018.01.11 260
50 전자정부표준 프레임워크 eGov 공통 콤퍼넌트 설명 (산출물) file 졸리운_곰 2018.01.11 225
49 전자정부프레임워크 eGov : 로그인 분석 졸리운_곰 2018.01.11 261
48 전자정부표준프레임워크 eGov : Sample예제 기본적인 흐름 분석하기. 졸리운_곰 2018.01.11 182
47 전자정부표준 프레임워크 eGov 테이블 설명서 : 공통컴포넌트 3.5.0 ERD 파일 file 졸리운_곰 2018.01.11 258
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED