Legday
[Spring] Controller로 데이터받는방법 본문
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가 잘 됐습니다

'Spring&Springboot > Spring(개인공부용)' 카테고리의 다른 글
| [Spring] URI와 URL이란? (0) | 2022.08.25 |
|---|---|
| [Spring]IoC 컨테이너란? (0) | 2022.08.25 |
| [STS] View Resolver 사용하기 (0) | 2022.08.24 |
| [JAVA]메이븐(maven)과 그래들(gradle)이란? (0) | 2022.08.24 |
| [Spring] 로컬호스트로 서버연결해 텍스트 출력하기 (0) | 2022.08.24 |