본문 바로가기
카테고리 없음

서블릿 POST 방식 요청시 한글깨짐 해결

by 맛길만걷자 2024. 6. 27.
728x90
반응형

// POST 방식 요청 시 문자 인코딩이 서버 기본 값으로 지정
// -> 한글 깨짐 -> 문자 인코딩 변경 필요
// *모든 doPost()메소드에 인코딩 변경 코드를 작성해야함

 

서블릿
req.setCharacterEncoding("UTF-8");

추가해주면 해결된다.


// ->모든 요청(전달 방식 가리지 않음)시 req, resp의 문자 인코딩을 UTF-8로 변경
// --> 매번적기 귀찮아서 필터(Filter) 만들어줌

 

 

common패키지 ->filter패키지-> filter 클래스 만들어줌

필요없는거 지워줌

아래전체코드참고


 

package edu.kh.community.common.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;



/**
 * 필터(Filter)
 * - 클라이언트 요청 시 생성되는 HttpServletRequest, HttpServletResponse 가
 * 요청을 처리하는 Servlet에 도달하기 전에 특정 코드를 수행하는 클래스
 *
 * [요청 흐름]
 * 클라이언트 -> 요청 -> HttpServletRequest-> 필터 -> 요청 처리 Servlet
 *                    HttpSerlvetResponse
 *                          생성
 *
 *- 여러 필터를 만들어 연쇄적으로 연결하여 수행할 수 있다. (FilterChain)
 */

// @WebFilter("url패턴")
// - 해당 클래스를 필터 클래스로 등록
// - url 패턴에 일치하는 요청이 있을 경우 해당 요청을 필터링함

// filterName 속성 : 필터의 이름 지정, 필터 순서 지정시 사용
// urlPatterns 속성 : 요청 주소 패턴

// /==/community == 최상위 주소
// *== 모든
// /* == 최상위 주소 하위 모든 == 모든 요청
@WebFilter(filterName="encondingFilter", urlPatterns="/*")

public class EncodingFilter extends HttpFilter implements Filter {
     
    // 서버 실행 시 또는 필터 코드 변경 시 필터 객체가 자동 생성
    // 그 때, 필터에 필요한 내용을 초기화 하는 메소드
    public void init(FilterConfig fConfig) throws ServletException {
        System.out.println("문자 인코딩 필터 초기화");
    }

    // 서버 실행 중 필터 코드가 변경되어
    // 기존 필터를 없애할 때 수행되는 메소드
    public void destroy() {
        System.out.println("문자 인코딩 필터 파괴");
    }
   
    //필터 역할을 수행하는 메소드
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
       
        // ServletRequest == HttpServletRequest의 부모타입
        // ServletResponse == HttpServletResponse의 부모타입
        // -> 필요 시 다운 캐스팅
       
        // 모든 요청의 문자 인코딩을 UTF-8로 설정
        request.setCharacterEncoding("UTF-8");
       
        // 모든 응답의 문자 인코딩을 UTF-9로 설정
        response.setCharacterEncoding("UTF-8");
       
        // 연결된 다음 필터 수행(없으면 Servlet 수행)
        chain.doFilter(request, response);
    }

   

}
728x90
반응형