[Servlet] Servlet을 통해 post로 전송 된 데이터 받기

어제 JSP에서 FORM send, POST 방식으로 보낸 한글 데이터가 자꾸 깨져보이는 현상이 있었다.

이미 나와 같은 시행착오를 겪은 사람들이 상당히 많았는지 구글에 많은 데이터가 있었는데 방법들이 다 먹히지 않는 것이다.

GET 방식으로 보낸 데이터는 구글링 신공으로 금방 처리했는데 유독 POST만 잘 안나왔다.
한 시간을 넘게 삽질했고 원인을 찾아 해결했다. (엄청나게 허무.....)

1) 서버의 web.xml 파일 내 코드 주석 해제

    <filter>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <!-- <async-supported>true</async-supported> -->
    </filter>

   중략

    <filter-mapping>
        <filter-name>setCharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

=> 구글링 결과 자꾸 이 코드를 집어넣으래서 "아니 이미 들어가 있는데 왜 난 안되냐고!!"했었는데......... 알고보니 써있긴 써있었지만 주석처리가 되어 있었다..ㅡㅡ;;
워낙 다른 코드도 많아 "아 여긴 주석처리 해놔도 적용이 되나보다" 했는데 당연히 안되는 거였다................. 결국 주석을 해제 처리해주니 되더라........(물론 아래 2번을 한 상태에서다)

2) doPost 메소드에서 Response의 컨텐츠 타입과 인코딩 문자열 지정

이것은 간단하다.
response 객체의 컨텐츠 타입과 문자열만 아래처럼 지정해주면 된다. response.setContentType("text/html;charset=utf-8");
그럼 response객체는 자동으로 utf-8로 인코딩이 되는 것이다.

댓글

이 블로그의 인기 게시물

로컬 Tomcat 서버 실행속도 개선

2019.05.23 - SQLAlchemy 의 객체 상태 관리 (expire, refresh, flush, commit) 에 관한 이해

2020.02.17 Python의 multiprocessing 중 Pool.map(), chunksize에 관한 내용