취미로 음악을 하는 개발자

[Spring Boot] Form 본문

공대인/Spring[Boot]

[Spring Boot] Form

영월특별시 2019. 7. 31. 22:02
728x90

프로젝트 생성



코드 구현


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.study.springboot;
 
public class Member {
    private String id;
    private String name;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
cs


위의 Member 클래스와 같은 형태를 파라미터와 관련해서 말할 때는 커맨드 객체

데이터 테이블과 관련해서 말할 때는 DTO(Data Transfer Object)라고 함. 


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
package com.study.springboot;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
 
@Controller
public class MyController {
    @RequestMapping("/")
    public @ResponseBody String root() throws Exception{
        return "Form 데이터 전달받아 사용하기";
    }
    
    @RequestMapping("/test1")
    public String test1(HttpServletRequest httpServletRequest, Model model) {
        String id = httpServletRequest.getParameter("id");
        String name = httpServletRequest.getParameter("name");
        
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        
        return "test1";        
    }
    
    @RequestMapping("/test2")
    public String test2(@RequestParam("id"String id,
                        @RequestParam("name"String name,
                        Model model) {
        // 파라미터가 많아지면 불편해진다.
        model.addAttribute("id", id);
        model.addAttribute("name", name);
        
        return "test2";
    }
    
    @RequestMapping("/test3")
    public String test3(Member member, Model model) {
        // 파라미터와 일치하는 빈을 만들어서 사용할 수 있다.
        // View 페이지에서 model을 사용하지 않고 member을 사용
        return "test3";
    }
    
    // 패스 자체에 변수를 넣어 줄 수도 있다.
    @RequestMapping("/test4/{studentId}/{name}")
    public String getStudent(@PathVariable String studentId,
                            @PathVariable String name,
                            Model model) {
        model.addAttribute("studentId", studentId);
        model.addAttribute("name", studentId);
        return "test4";
    }
}
 
cs


test1로 요청이 오면 httpServletRequest를 통해 얻은 idname 값을 받아 model의 속성으로 넣어주고 test1.jsp를 호출

호출할 때 아래와 같은 형식으로 입력을 해준다. test2, test3도 똑같다.

/test1?id=아이디&name=이름



test2으로 요청이 오면 RequestParam 어노테이션을 이용하는데 

@RequestParam("id"String id

이것은 @RequestParam 파라미터에 들어온 값(id)test2 메소드의 파라미터(id)에 넣어준다. 이후의 과정은 test1과 같다.




test3으로 요청이 오면 커맨드 객체를 이용해서 값을 받는데, test3.jsp를 보면 아래와 같은 부분이 있다.

당신의 아이디는 ${member.id }입니다. <br>
당신의 이름은 ${member.name } 입니다.

여기서 커맨드 객체를 이용해서 바로 값을 호출할 수 있게 된다.




@RequestMapping("/test4/{studentId}/{name}")

마지막으로 패스 자체에 변수를 넣을 수 있는데 위와 같은 경로로 요청이 들어오면 각각이 getStudent의 매개변수로 들어간다.



@PathVariable String studentId, @PathVariable String name

따라서 위의 경로의 studentId가 매개변수 studentId로, name이 매개변수 name값으로 들어가게 된다.



// test1.jsp    test2.jsp    test4.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    out.println("#01: Hello World");
%>
<br>
당신의 아이디는 ${id }입니다.<br>
당신의 이름은 ${name } 입니다.
</body>
</html>
cs



// test3.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    out.println("#03: Hello World");
%>
<br>
당신의 아이디는 ${member.id }입니다. <br>
당신의 이름은 ${member.name } 입니다.
</body>
</html>
cs



'공대인 > Spring[Boot]' 카테고리의 다른 글

[Spring Boot] 데이터 검증, Validator  (0) 2019.08.02
[String Boot] lombok  (0) 2019.08.02
[Spring Boot] Model 객체  (1) 2019.07.31
[Spring Boot] 정적 리소스  (0) 2019.07.31
[Spring Boot] 의존 주입 방법  (0) 2019.07.29
Comments