tomcat
[tomcat] URI Encoding (Percent Encoding)
잘할수있을거야
2024. 9. 25. 23:12
@WebServlet("/test/percentEncoding")
public class PercentEncodingServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("=== PercentEncodingServlet.doGet ===");
System.out.println("request = " + request);
String username = request.getParameter("username");
System.out.println("username = " + username);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("=== PercentEncodingServlet.doPost ===");
System.out.println("request = " + request);
String username = request.getParameter("username");
System.out.println("username = " + username);
}
}
요청: http://localhost:8080//test/percentEncoding?username=홍길동
(tomcat 10 사용)
HttpServletRequest.getParameter("username")
-> uri에 포함된 username 쿼리 파라메터에 대한 값을 가져오는 메서드
uri encoding시에 기본적으로 UTF-8을 사용하도록 규약되있음
https://it-eldorado.com/posts/49e57d77-f624-4b2f-880c-cf944a39d92e
https://stackoverflow.com/questions/29276432/what-character-set-should-be-used-for-url-encoding
tomcat/conf/server.xml의 <Connector>의 URIEncoding 속성 값
https://tomcat.apache.org/tomcat-10.1-doc/config/http.html
별도의 셋팅이 없으면 알아서 encoding decoding이 모두 default로 UTF-8로 설정되어 있기 때문에 한글 사용시 아무 문제가 없이 정상 출력된다.
만약 이 값을 다른 charset으로 변경한 후
톰캣을 실행시켜 위의 요청을 다시 날리게 되면
인코딩시에는 UTF-8로 처리되었지만 tomcat에서 EUC-KR로 디코딩해버려서 한글이 깨지게 됨.
스프링에서 인코딩 관련해서 제공해주는 부분이 많아서 인코딩 관련 개념은 하나씩 정리해나갈 필요가 있는듯하다?