URLEncoder.encode(); , URL재작성(Rewriting)

Web Development assistant·2021년 12월 5일
0

# spring

목록 보기
2/32
post-custom-banner

우리가 직접 브라우저의 url에 한글을 입력하면,
브라우저가 자동으로 한글을 인코딩해주기 때문에 정상적으로 한글이 잘 보인다.

하지만 컨트롤러에서 url을 직접 만들고 한글을 추가했을 경우
그건 브라우저가 인코딩을 해줄 수 없기때문에 이때
URLEncoder.encode(); 메서드를 사용한다.

(요청을 보낼때 요청을 받는 서버는 사용자가 어떤 os를쓰고 어떤 인코딩을 쓰는지 모르기 때문에 모든 인코딩에 공통으로 들어가는 아스키 코드를 사용하여 변환해준다. 따라서 한글이 16진수 아스키코드로 바뀌어 깨져 보인다.)

POST방식으로 보내도 마찬가지로 데이터가 HTTP 바디에 있음이 다를 뿐이지 아스키코드로 인코딩하여 보낸다.
//URLEncoder.encode() = 아스키문자가 아닌걸 16진수로 변환해준다.

//컨트롤러에 throws Exception 예외처리 필수

@getMapping("/save")
public String save(UserVO user) throws Exception{
	String msg = URLEncoder.encode("잘못된 아이디", "UTF-8");

	return "redirect:/user/userjoin/add?msg="+msg;

위의 코드를 보면 save에서 add로 리다이렉트 하는 컨트롤러이다.

컨트롤러 -> view로 넘길때 위와 같이 하면 되고

view에서 정상적으로 받기 위해서는

//jsp 처음에 임포트를 할것!
<%@ page import="java.net.URLDecoder" %>


${URLDecoder.decode(param.msg, "UTF-8")}

위와같이 jsp view에서는 디코딩을 해 주어야한다.

하. 지. 만.

위와같이 복잡하게 인코딩 디코딩 할 필요 없이
그냥 모델에 받아서 넘겨도 된다. 스프링이
그저 model.addAttribute("msg", msg);
한 뒤
return "redirect:/user/userjoin/add"로 작성해주면
url에 처음 작성한 코드와 같이 msg를 추가해준다.

	1. URLEncoder를 이용한 첫 번째 방법
    	String msg= URLEncoder.encode("어쩌구저쩌구","UTF-8");
        return "redirect:/user/userJoin/add?msg="+msg;
        
        2.모델을 이용한 두 번째 방법
        model.addAttribute("어쩌구저쩌구");
        return "redirect:/user/userJoin/add";

두 번째 방법은 jsp에서 따로 URLDecoder.decode()를 써줄 필요가 없어 간단하고 명료하다.

post-custom-banner

0개의 댓글