배운 것
@GetMapping
@PostMapping
URL인코딩
내용 정리
@RequestMapping을 간단하게 쓸 수 있게 해주는 것이 @GetMapping, @PostMapping
@RequestMapping(value="/register/add") // 신규회원 가입 화면
public String register() {
return "registerForm";
}
@RequestMapping("/register/save")
public String save(User user, Model m) throws Exception {
// 1. 유효성 검사
if(!isValid(user)) {
String msg = URLEncoder.encode("id를 잘못 입력하셨습니다.", "utf-8");
m.addAttribute("msg", msg);
return "forward:/register/add"; // 다시 회원가입 화면으로 되돌려보냄
// 위 두 줄과 같은 의미
// return "redirect:/register/add?msg="+msg; // URL재작성(rewriting)
}
// 2. DB에 신규회원 정보 저장
return "registerInfo";
}
@RequestMapping -> @GetMapping, @PostMapping
@GetMapping("/register/add")
public String register() {
return "registerForm";
}
@PostMapping("/register/save")
public String save(User user, Model m) throws Exception {
// 1. 유효성 검사
if(!isValid(user)) {
String msg = URLEncoder.encode("id를 잘못 입력하셨습니다.", "utf-8");
m.addAttribute("msg", msg);
return "forward:/register/add"; // 다시 회원가입 화면으로 되돌려보냄
// 위 두 줄과 같은 의미
// return "redirect:/register/add?msg="+msg; // URL재작성(rewriting)
}
// 2. DB에 신규회원 정보 저장
return "registerInfo";
}
매핑될 URL의 공통 부분을 @RequestMapping으로 클래스에 적용할 수 있음
@Controller
@RequestMapping("/register")
public class RegisterController {
@GetMapping("/add")
public String register() {
return "registerForm";
}
@PostMapping("/save")
public String save(User user, Model m) throws Exception {
// 1. 유효성 검사
if(!isValid(user)) {
String msg = URLEncoder.encode("id를 잘못 입력하셨습니다.", "utf-8");
m.addAttribute("msg", msg);
return "forward:/register/add"; // 다시 회원가입 화면으로 되돌려보냄
// 위 두 줄과 같은 의미
// return "redirect:/register/add?msg="+msg; // URL재작성(rewriting)
}
// 2. DB에 신규회원 정보 저장
return "registerInfo";
}
URL에 한글을 입력하면 브라우저가 자동으로 URL인코딩을 해 준다
하지만, Controller에서 직접 URL을 만들어서 한글을 입력하면, 우리가 직접 URL인코딩을 해주어야 함
URLEncoder.encode("문자열", "utf-8")
받는 쪽에서는 URL디코딩을 해주어야 함
EX)
<div id="msg" class="msg"> ${URLDecoder.decode(param.msg, "utf-8")}</div>
URL인코딩
- 브라우저에서 URL을 전송할 때, 아스키코드가 아닌 문자들은 URL인코딩을 해서 전송한다 / 서버는 URL디코딩
- 아스키가 아닌 문자들을 %~%~%~로 변환
- 1바이트마다 %를 붙인 것
- 문자코드(숫자) -> 문자열 ( 인코딩 )
- 문자열 -> 문자코드(숫자) ( 디코딩 )
URL인코딩 왜 할까?
ㅇ URL은 아스키코드로만 이루어져야 하기 때문에. 왜?
-> 인터넷을 통해 전세계의 어느 서버와도 통신할 수 있는데, 받는 서버가 어떤 OS를 쓰고, 어떤 인코딩을 쓰는지 모르기 때문에 (같은 OS, 같은 인코딩을 쓸거라는 보장이 없음) URL은 공통되는 부분으로만 이루어져야 한다.
그것이 아스키코드 (아스키는 모든 인코딩에서 공통으로 포함됨)
느낀 점 / 보완할 점
계속 반복하다보니 조금씩 머리에 들어오는 느낌이 든다
착각일 수 있지만 지금 이대로 쭉쭉 나가자.. 제바ㅔ랄ㄹ
잘못된 정보가 있다면 지적부탁드려요
'아카이브 > 스프링' 카테고리의 다른 글
| 스프링의 정석 (쿠키) (0) | 2021.12.28 |
|---|---|
| 스프링의 정석 ( redirect / forward ) (0) | 2021.12.28 |
| 스프링의 정석 (@RequestParam, @ModelAttribute) (0) | 2021.12.27 |
| 스파르타 코딩클럽 [ 웹개발의 봄, Spring ] - 1주차 (0) | 2021.12.26 |
| 스프링의 정석 (서블릿과 JSP) (0) | 2021.12.24 |