데이터 전송 + 데이터 수신하기
데이터 전송 + 데이터 수신하기
- 이전에 배웠던 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
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을 직접 입력해야 한다.(어쩔수 없음)
'교육 > Spring' 카테고리의 다른 글
Spring 개발자 수업 97일차(2) - 간단한 메모장 만들기 (0) | 2021.08.12 |
---|---|
Spring 개발자 수업 97일차(1) - Spring MVC Model DI (0) | 2021.08.12 |
Spring 개발자 수업 96일차(1) - STS 다운로드 및 초기 설정하기 (0) | 2021.08.11 |
Spring 개발자 수업 95일차 - 관점 지향 프로그래밍(AOP) (0) | 2021.08.10 |
Spring 개발자 수업 94일차(2) - 스프링 DI, 빈(bean) (0) | 2021.08.10 |
댓글