본문 바로가기
아카이브/스프링

스프링의 정석 ( @GetMapping, @RequestMapping, URL인코딩 )

by nineteen 2021. 12. 27.
반응형

배운 것

@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은 공통되는 부분으로만 이루어져야 한다.

 

그것이 아스키코드 (아스키는 모든 인코딩에서 공통으로 포함됨)

 

 

 

 

느낀 점 / 보완할 점

계속 반복하다보니 조금씩 머리에 들어오는 느낌이 든다

착각일 수 있지만 지금 이대로 쭉쭉 나가자.. 제바ㅔ랄ㄹ

 

 

 

 

잘못된 정보가 있다면 지적부탁드려요