SOCO

post요청 : 한글 입력 문제 본문

백/Servlet,JSP(잠시 pause)

post요청 : 한글 입력 문제

ssooda 2021. 7. 1. 11:45

한글출력문제 : 서버에서 클라이언트로 응답할 때 한글이 깨지는 문제

https://ssooccoo.tistory.com/56

 

서블릿 출력 형식의 이해 : 문서형태지정&한글출력

1. ctrl + F11 2. server 뷰에서 우클릭 restart 후 웹에서 F5 서블릿은 어떻게 출력되고 클라이언트는 어떻게 이해하는가 문제점 1. 브라우저의 자의적 해석 웹은 html 마크업 언어를 통해 랜더링 되어야

ssooccoo.tistory.com

 

한글입력문제 : 클라이언트에서 서버로 요청할 때 한글이 깨지는 문제

 

멀티 바이트 문자 전송문제 

UTF-8 : 멀티바이트

영문자는 1바이트면 충분

한글은 2바이트임

 

클라이언트가 UTF-8로 요청하더라도

서버(톰캣)는 ISO-8859-1이라는 인코딩 방식을 이용함

ISO-8859-1은 1바이트를 하나로 인식함

 

한글은 2바이트를 하나로 인식해야하는데 서버는 그렇게 인식하지 않는 문제가 발생

서버가 한글을 깨진 상태로 인식하게 됨

 

서버가 깨진 상태로 인식하므로 이를 다시 출력하게 되면 당연히 깨진 상태로 출력됨

 

해결방법

1. 서블릿 파일에서 설정하는 방법 : request.setCharacterEncoding("UTF-8")

@WebServlet("/notice-reg")
public class NoticeReg extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException 
    {
		//request : 입력도구, response : 출력도구
		response.setCharacterEncoding("UTF-8"); //출력 시 인코딩 방식 지정
		response.setContentType("text/html; charset=UTF-8"); //출력 시 문제 해결
		
		request.setCharacterEncoding("UTF-8"); //입력시 인코딩 방식 지정
		
		PrintWriter out = response.getWriter();
		
		String title = request.getParameter("title");
		String content = request.getParameter("content");
		
		out.println(title);
		out.println(content);
	}

}

 

2. 톰켓 서버 설정을 바꾸는 방법