본문 바로가기
교육/Spring

Spring 개발자 수업 96일차(2) - 데이터 전송 + 데이터 수신하기

by yhyuk 2021. 8. 11.
728x90
반응형

데이터 전송 + 데이터 수신하기


데이터 전송 + 데이터 수신하기

- 이전에 배웠던 Java의 Servlet/JSP와 현재의 Spring Controller/JSP를 비교해 가면서 간단한 데이터 전송/수신 폼을 만들어보자.

- 중점적으로 확인해야 할것은 웹 페이지에서 만들어둔 form을 넘길때 Controller에서 데이터를 어떤 방법으로 받는지 잘 확인해보자.

파일 만들기
com.test.spring > DataController.java
                > DataDAO.java
                > DataDTO.java

WEB-INF > views > data > add.jsp
                       > addok.jsp

 

  1) DataDAO.java

- 실제 DB 연동을 하지는 않았지만 했다고 가정하고 각 데이터를 출력해 콘솔창으로 확인하기

public class DataDAO {
	public void add(DataDTO dto) {
		System.out.println(dto.getName());
		System.out.println(dto.getAge());
		System.out.println(dto.getAddress());
		System.out.println(dto.getTel());
		System.out.println(dto.getEmail());
	}
}

 

  2) DataDTO

- Lombok을 사용해 @Data -> getter/setter 만들기

import lombok.Data;

@Data
public class DataDTO {
	
	private String name;
	private String age;
	private String address;
	private String tel;
	private String email;
    
}

 

  3) add.jsp

<h1 class="page-header">데이터 입력하기</h1>      
<form method="POST" action="/spring/data/addok.action">
			
	<table class="table table-bordered">
		<tr>
			<th>이름</th>
			<td><input type="text" name="name" class="form-control" required></td>
		</tr>
		<tr>
			<th>나이</th>
			<td><input type="text" name="age" class="form-control" required></td>
		</tr>
		<tr>
			<th>주소</th>
			<td><input type="text" name="address" class="form-control" required></td>
		</tr>
		<tr>
			<th>전화번호</th>
			<td><input type="text" name="tel" class="form-control" required></td>
		</tr>
		<tr>
			<th>이메일</th>
			<td><input type="text" name="email" class="form-control" required></td>
		</tr>
	</table>
			
	<div>
		<input type="submit" value="보내기" class="btn btn-default" />
	</div>
			
	<input type="hidden" name="num" value="100">
</form>

 

  4) addok.jsp

  - 따로 추가로 만들 필요 없이, 페이지가 정상적으로 넘어가는지 확인 하기 위해서 만든 페이지

<body>
	<h1 class="page-header">결과 페이지</h1>      
</body>

 

  5) DataController.java

  - Spring에서 웹 페이지로 데이터를 가져오는 방법은 3가지가 존재한다.

  방법1) req.getParameter("");

    - 기존 Servlet/JSP에서 사용 했던 방법이며 가져올 Parameter를 입력해야 하는 번거로움이 있었다.

    - 앞으로는 사용하지 않을 예정이다!!

@Controller
public class DataController {

    @RequestMapping(value = "/data/add.action", method = { RequestMethod.GET })
    public String add(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
        return "data/add";
    }

    @RequestMapping(value="/data/addok.action", method={ RequestMethod.POST })
    public String addok(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
    
        // 방법1. 기존 방식
    	String name = req.getParameter("name");
        String age = req.getParameter("age");
        String address = req.getParameter("address");
        String tel = req.getParameter("tel");
        String email = req.getParameter("email");
        
        DataDTO dto = new DataDTO();
        dto.setName(name);
        dto.setAge(age);
        dto.setAddress(address);
        dto.setTel(tel);
        dto.setEmail(email);
        
        return "data/addok";
    }
}

 

  방법2) 요청 메소드(각 매개변수 선언하기)

    - 요청 메소드에서 가져올 데이터를 변수를 form에서 지정해준 name명으로 각 매개변수 만들기

    - 변수로 지정만 해줘도 req.getParameter를 하지 않아도 알아서 똑같은 name만 찾아서 처리를 해준다.

    - 굉장히 편리하다.

@Controller
public class DataController {

    @RequestMapping(value = "/data/add.action", method = { RequestMethod.GET })
    public String add(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
        return "data/add";
    }

    @RequestMapping(value="/data/addok.action", method={ RequestMethod.POST })
    public String addok(HttpServletRequest req, 
                        HttpServletResponse resp, 
                        HttpSession session,
                        String name,
                        String age,
                        String address,
                        String tel,
                        String email) {
    
        // 방법2. 
        DataDTO dto = new DataDTO();
        dto.setName(name);
        dto.setAge(age);
        dto.setAddress(address);
        dto.setTel(tel);
        dto.setEmail(email);
    
        return "data/addok";
    }
}

 

 

  방법3) 요청 메소드의 매개변수 이용하는 방법

    - 위 방법2)와 비슷하며, DataDTO 전체를 매개변수로 지정해두어, 받아온 데이터를 알아서 찾아 처리해준다.

    - 굉장히 편리하며, 방법2와 함께 사용이 가능하다. (hidden태그로 넘겨 받은 num 매개변수 지정)

@Controller
public class DataController {

    @RequestMapping(value = "/data/add.action", method = { RequestMethod.GET })
    public String add(HttpServletRequest req, HttpServletResponse resp, HttpSession session) {
        return "data/add";
    }

    @RequestMapping(value="/data/addok.action", method={ RequestMethod.POST })
    public String addok(HttpServletRequest req, 
                        HttpServletResponse resp, 
                        HttpSession session,
                        DataDTO dto,
                        String num) {
    
        // 방법3. 
        DataDAO dao = new DataDAO();
        dao.add(dto);
		
        System.out.println(num); // add.jsp에서 form으로 넘긴 hidden 데이터 가져오기
    
        return "data/addok";
    }
}

 

- 데이터 입력하기 페이지 > add.action

각각 입력 후 보내기 -> addok.action

 

- 데이터 전송 확인하기 > addok.action

DataDAO에서 add메소드로 미리 print 찍어둔모습인데 데이터가 잘 수신된걸 확인할 수 있다.


MEMO>

# Controller에서 한글깨짐 방지를 위한 방법은 2가지가 있다.
     1) 기존방식: req.setCharacterEncoding("UTF-8");
     2) web.xml에 인코딩 필터 설정하기

# 스프링에서는 어노테이션(@)을 많이 사용한다.  (XML 위주의 설정 -> 어노테이션 위주의 설정)

# Controller와 Servlet의 차이점!
    Servlet은 보통 파일 1개당 jsp 1개 꼴로 만들었지만,
    Controller는 파일1개로 여러 jsp를 관리할 수 있다! (@RequestMapping(vale="") 설정으로 각각 주소매핑 가능!)

# Controller의 데이터 가져오는 방법은 3가지 

# STS에서는 웹 페이지 url을 직접 입력해야 한다.(어쩔수 없음)
728x90
반응형

댓글