Spring - 04

하승·2022년 7월 11일
0

웹 개발반 - Spring

목록 보기
5/8
post-thumbnail

스프링 MVC Controller의 특징

HttpServletRequest, HttpServletResponse를
거의 사용할 필요 없이 기능 구현
다양한 타입의 파라미터 처리, 다양한 타입의 리턴 타입 사용 가능
GET 방식, POST 방식 등 전송 방식에 대한 처리를 어노테이션으로 처리 가능
상속 / 인터페이스 방식 대신 어노테이션으로 간단하게 설정 가능

POST 방식 테스트

POST 방식의 전송 방식에 대한 테스트를 해보기 위해서는 form 태그를 
이용해야 하기 때문에 테스트를 진행 할때마다 form 태그를 일일이 만들어야
하는 불편함이 있다. 그걸 좀더 편하게 진행하기 위해 Postman이라는 툴을 이용해준다.

Postman(포스트맨)

여러 방식의 요청을 외부에서 보낼 수 있도록 도와주는 개발 툴
GET, POST 외에도 PUT, DELETE 등의 요청도 가능하다.

Postman 설치

https://www.postman.com/downloads > 다운로드 버튼 클릭
> 설치파일 실행 > 계정 생성 > 로그인

Postman 툴을 이용한 post방식 테스트

  1. 자바에서 컨트롤러 클래스를 만든후 메소드를 하나 만들어준다.
package com.koreait.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/sample/*")
@Log4j
public class SampleController {
	@PostMapping("basic")
	public void baiscPost(int age) {
		log.info("==========post 방식 요청===========");
		log.info(age);
	}
}
  1. Postman 설치후 로그인까지 완료했다면 WorkSpaces를 클릭하여 새 WorkSpaces를 만들어 준 뒤

    1) +버튼 클릭하여 새창 띄우기
    2) 처음에는 GET으로 되어있는데 1번 창을 클릭후 POST로 바꿔준다.
    3) 경로를 적어준다.
    4) body 클릭
    5) x-www-form-urlencoded 클릭
    6) KEY와 VALUE 값 작성
    7) Send 버튼 클릭
    이렇게 한다면 잘 실행되는 것을 확인할 수 있다.

Controller 파라미터 수집방법

DTO 객체로 수집하기

DTO 객체로 수집하기 위하여 SampleDTO를 만들어준다.

package com.koreait.domain;
@Data
public class SampleDTO {
	private String name;
	private int age;
}

DTO를 만들었다면 메소드를 하나 추가해준다.

	@GetMapping("ex01")
	public String ex01(SampleDTO dto, Model model) {
		log.info(dto);
		model.addAttribute("dto",dto);
		// WEB-INF/views/sample/ex01.jsp
		return "/sample/ex01";
	}

그 후 테스트를 해본다면 WEB-INF/views/sample/ex01.jsp경로로 이동하기 때문에 views 폴더안에 sample폴더를 만든후 exo1.jsp 파일을 만들어 준다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex01</title>
</head>
<body>
	<h1>ex01</h1>
	<p>
		Model<br>
        <!-- 파라미터 값은 el문을 사용하여 받아오면 된다. -->
		name : ${dto.name} / age : ${dto.age}
	</p>
</body>
</html>

실행

파라미터명과 담을 변수명이 다른 경우 수집방법

위 에서처럼 메소드를 하나 추가해준다.

	//@RequestParam : @RequestParam("가져올 데이터 이름") [데이터타입] [가져온 데이터를 담을 변수] 
    //위와 같은 형식으로 사용한다.
	@GetMapping("ex02")
	public String ex02(@RequestParam("data1")String name,@RequestParam("data2")int age, Model model) {
		model.addAttribute("name",name);
		model.addAttribute("age",age);
		return "/sample/ex02";
	}

이번엔 /sample/ex02 로 리턴을 해주기 때문에 sample폴더 안에 ex02.jsp파일을 하나 만들어준다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex02</title>
</head>
<body>
	<h1>ex02</h1>
	<p>
		Model<br>
		name : ${name} / age : ${age}
	</p>
</body>
</html>

실행

실행을 해본다면 실제로 data1과 data2로 넘겨준다.

파라미터가 같은 이름으로 여러개 날라오는 경우(ex : checkbox) 수집방법

똑같이 메소드를 하나 추가해준다.

	@GetMapping("ex03")
	public void ex03(@RequestParam("data")String[] datas, Model model) {
		model.addAttribute("datas",datas);
	}

이번엔 따로 return을 해주지 않아 GetMapping에 적혀있는 ex03.jsp로 이동 하게된다.
그러므로 sample 폴더 안에 ex03.jsp파일을 만들어준다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex03</title>
</head>
<body>
	<h1>ex03</h1>
	<p>
		<c:forEach items="${datas}" var="data">
			${data}<br>
		</c:forEach>
	</p>	
</body>
</html>

이번엔 <c:forEach>문을 사용할 것 이므로 페이지 상단에 JSTL core 선언을 해준다.
참고로 <c:forEach>는 목록을 입력 받아서 목록의 갯수만큼 반복하는 반복문이다.

실행

profile
화이팅!

0개의 댓글