Legday

[Spring] Controller로 데이터받는방법 본문

Spring&Springboot/Spring(개인공부용)

[Spring] Controller로 데이터받는방법

Legday 2022. 8. 25. 13:54

1) QueryString을 이용해 데이터 받기

- 쿼리스트링은 url주소를 보다보면 ?로시작하는 문자열이 있다. 이 문자열을 쿼리스트링이라고 한다

- 함수 구조

//QuertString으로 데이터 받기
@GetMapping("/user/userinfo")
	public String userinfo(Integer id,String userName) {
		System.out.println("id : "+id); //콘솔창에 입력받은 ID출력
		System.out.println("username : "+userName); //콘솔창에 입력받은 PW출력
		return "user/userinfo";
	}

- userinfo.jsp 파일에는 간단한 문구만 적어놨다.

- 실제 브라우저 url에는 IP주소/파일명?변수=값 이런식이다

- 위 코드를 바탕으로 브라우저에 localhost:8000/user/userinfo/id=1234&&userName=홍길동 이렇게 치고 STS 콘솔창을 확인해보자

- 데이터를 잘 전달 받았다

2) Path Variable 방법으로 데이터 받기

- Path Variable 은 쿼리스트링과 다르게 url 뒤에 값을 받아온다. (쿼리스트링처럼 key:value 구조가 아님)

- 요새 트렌디한 사이트는 Path Variable 방법을 더 많이 사용한다.(깔끔하기 때문)

- 매개변수는 null값도 받기위해 레퍼런스타입을 사용

- 매개변수앞에 PathVariable 값이라는걸 @을 이용해 표시

- 소스코드

//Path Variable(패스 값 받기 방법)
	//URI : http://localhost:8000/user/userinfo2/30
	//트렌디하고 가장 깔끔한 방법
	@GetMapping("/user/userinfo2/{id}")
	public String userinfo2(@PathVariable Integer id) {
		
		System.out.println("id : "+id);
		return "user/userinfo";
	}

- GetMapping 어노테이션에는 {}대괄호를 이용하여 입력받을 키를 넣고 실제 url에 적어주면 된다

- localhost:8000/user/userinfo2/30

- 위와 같이 적고 STS 콘솔창을 보면 잘 데이터를 받아 출력한 것을 알 수 있다

3) redirect를 이용해 post형식으로 데이터 받기!!

- 위 방법을 위해서는 3개의 메서드와 2개의 jsp파일을 생성하면 된다!

- Redirect란 웹 브라우저(사용자)가 어떤 URL로 웹 서버를 요청했을때 다른 URL로 넘겨주는 것을 의미

- joinForm 에서 받은 데이터를 가지고 user/main 으로 보내준다 이때 post방식이기 때문에 데이터를 노출시키지 않는다!

- 우선 아이디,패스워드,이메일을 입력할 수 있는 폼을 만든 joinForm.jsp파일을 joinForm()메서드에 연결시켜준다. 이때 jsp파일 내에 action값을 /user/join으로 연결시키면 데이터를 들고 /user/join으로 post방식으로 전송한다!

- /user/join 경로로 연결시킨 join()메서드를 만들고 매개변수로 joinForm.jsp파일에 있는 데이터 키 이름과 같은 이름의 매개변수를 선언한후 그 데이터를 가지고 redirect기술로 /user/main 으로 보낸다!

// 사용자가 데이터를 입력할 폼을 가지는 JSP
	@GetMapping("/user/joinForm")
	public String joinForm() {
		return "user/joinForm";
	}
	
	//POST방식으로 받기때문에 PostMapping어노테이션 설정후 데이터를 받고
	//redirect로 다른 페이지로 넘겨준다!
	@PostMapping("/user/join") 
	public String join(String username, String password, String email) {
		//요청을 재분배(redirect)
		System.out.println("username : " +username);
		System.out.println("password : " +password);
		System.out.println("email : "+email);
		return "redirect:/user/main"; //주소를 리턴
	}
	
	@GetMapping("/user/main")
	public String main() {
		
		return "/user/main";
	}
------------joinForm.jsp------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>회원가입페이지</h1>
	<hr/>
	<form method="post" action="/user/join">
		username : <input type="text" name="username"/><br/>
		password : <input type="text" name="password"/><br/>
		email : <input type="text" name="email"/><br/>
		<button type="submit">회원가입완료</button>
	</form>
</body>
</html>

--------------main.jsp---------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>main페이지</h1>
</body>
</html>

<결과확인>

- url 에 localhost:8000/user/joinForm 을 입력후 접속하면 아래와 같이 뜬다(port번호가 다르면 콘솔창에서 확인가능합니다)

- 데이터를 입력후 회원가입완료 버튼을 누르면 데이터를 가지고 /user/join 으로 이동합니다

- user/join 은 바로 user/main 으로 redirect합니다

- get방식이라면 url에 데이터가 다 노출되지만 post방식이라 안전하게 전달되서 redirect가 잘 됐습니다