2024.07.15 - [분류 전체보기] - Web Application(1) / 화면에서 자바로 데이터 전송(1. Form Data) / 요청 url 매핑 방식
Web Application(1) / 화면에서 자바로 데이터 전송(1. Form Data) / 요청 url 매핑 방식
[과제] 1. NameTelController 에서 '데이터 전송방식' 구현 (form submit 방식) 2. NAME_TEL 테이블 생성 3. name-tel.jsp 생성 (요청 url 매핑 방식 구현) 1. Spring Application 구동WAS 구동 시 web.xml 읽은 후 ServletConta
maverick11471.tistory.com
이전에 화면단으로 url을 맵핑하여 get, post, request 방식으로 화면을 구성해 보았다.
이번에는 화면에서 보내는 데이터를 받는 방법을 알아보겠다.
[과제]
1. NameTelController 수정 (데이터 받는 여러가지 방식 확인)
2. name-tel.jsp 수정
1. 화면단에서 전송한 데이터 받기
1-1. HttpServletRequest 객체를 통해서 파라미터 받기
1-2. @RequestParam 어노테이션을 통한 데이터 받기
1-3. @RequestParam으로 전송된 데이터 모두를 Map 객체에 매핑
1-4. Command 객체와 @ModelAttribute 어노테이션을 이용한 데이터 받기
< 다음 시간에 >
2. 자바에서 화면단으로 데이터 전송
2-1. Model 객체를 통한 데이터 전송, Model 객체의 addAttribute(키, 밸류)로 데이터 매핑해서 화면단으로 전송
2-2. HttpServletRequest 객체를 통한 데이터 전송
2-3. HttpSession 객체를 이용한 데이터 전송
[기본 공통사항]
- NameTelController
@Controller
public class NameTelController {
private NameTelService nameTelService;
@Autowired
public NameTelController(NameTelService nameTelService) {
this.nameTelService = nameTelService;
}
1-1. HttpServletRequest 객체를 통해서 파라미터 받기
① NameTelController 수정(Command 객체)
// Controller 객체의 메소드의 파라미터들은 객체를 생성하는 특수한 기능을 하게 되는데
// 이 기능으로 만들어진 객체를 Command 객체라고 부른다.
@GetMapping("/name-tel.do")
public String nameTelGet(HttpServletRequest request) {
System.out.println("name: " + request.getParameter("name"));
System.out.println("tel: " + request.getParameter("tel"));
return "name-tel";
}
② name-tel.jsp 수정 : get 방식으로 수정
<form action="/name-tel.do" method="get">
<input type="text" name="name">
<input type="text" name="tel">
<input type="submit" value="전송">
</form>
- 주소창에 입력한 값이 쿼리스트링식으로 구현
* 쿼리스트링 표현식: 주소창?key값=value&key값2=value2....
1-2. @RequestParam 어노테이션을 통한 데이터 받기
① NameTelController 수정
- 'required = false' 로 설정하지 않으면 오류가 난다. (이유: @RequiredParam의 required 속성이 'true'가
기본값이기 때문에 데이터를 전송하지 않으면 에러 발생)
- 'defaultValue = "test"' 는 기존 console창에 null 값이 나오는데 이를 test로 바꾸는 기능이다.
@GetMapping("/name-tel.do")
public String nameTelGet(@RequestParam(value = "name", required = false, defaultValue = "test") String n,
@RequestParam(value = "tel", required = false, defaultValue = "test") String t,
HttpServletRequest request) {
System.out.println("name: " + n);
System.out.println("tel: " + t);
return "name-tel";
}
② name-tel.jsp 수정 : 동일
그런데 parameter가 지금은 2개라 괜찮지만, 10개, 20개 등.. 너무 많아지면 일일이 작성하기가 너무 귀찮다....
이를 위해 1-3번의 방법이 시행된다.
1-3. @RequestParam으로 전송된 데이터 모두를 Map 객체에 매핑
① NameTelController 수정
// Map<String, String> ==> 지정했을 때 화면에서 넘겨준 키&밸류 형식의 데이터가 그대로 Map에 매핑이된다.
@GetMapping("/name-tel.do")
// @RequestParam의 required 속성은 true가 기본값이라 데이터를 전송하지 않으면 에러가 발생한다.
public String nameTelGet(@RequestParam Map<String, String> paramMap) {
System.out.println("name: " + paramMap.get("name"));
System.out.println("tel: " + paramMap.get("tel"));
return "name-tel";
}
② name-tel.jsp 수정 : 동일
1-4. Command 객체와 @ModelAttribute 어노테이션을 이용한 데이터 받기
① NameTelController 수정
// Controller 객체의 메소드의 매개변수로 클래스 타입의 변수를 선언하면 자동으로 객체를 생성하고
// 전송된 데이터의 키와 클래스의 멤버변수명이 같으면 자동으로 해당 변수의 setter 메소드가 동작해서
// 전송된 데이터의 밸류 값이 멤버변수에 담긴다.
// setter 메소드가 구현되어 있지 않으면 값이 담기지 않는다.
// @ModelAttribute 어노테이션은 생략할 수 있다.
// 조회 기능
@GetMapping("/name-tel.do")
public String nameTelPost(@ModelAttribute NameTelDto nameTelDto) {
System.out.println("name: " + nameTelDto.getName());
System.out.println("tel: " + nameTelDto.getTel());
return "name-tel";
}
- NameTelDto : setter 메소드 구현되어 있음
package com.bit.springboard.dto;
public class NameTelDto {
private String name;
private String tel;
public String getName() {
return name;
}
public String getTel() {
return tel;
}
public void setName(String name) {
System.out.println("setName 메소드 실행");
this.name = name;
}
public void setTel(String tel) {
System.out.println("setTel 메소드 실행");
this.tel = tel;
}
}
② name-tel.jsp 수정 : 동일
'백엔드 > Spring Framework' 카테고리의 다른 글
el 표기법과 JSTL (0) | 2024.07.16 |
---|---|
Web Application(3) / 자바에서 화면단으로 데이터 전송 (0) | 2024.07.15 |
Web Application(1) / 화면에서 자바로 데이터 전송(1. Form Data) / 요청 url 매핑 방식 (0) | 2024.07.15 |
IMPL 클래스에서 DAO 클래스를 이용하는 법 (0) | 2024.07.15 |
템플릿(3) / BOARD 파일 수정 (0) | 2024.07.15 |