SpringFramework/XML

POST방식의 전송요청 일 때 UTF-8 한글 인코딩 설정 request.setCharacterEncoding("UTF-8") / web.xml

유혁스쿨 2020. 8. 29. 01:19
728x90
반응형

 

우리가 뷰페이지 텍스트박스에서 한글을 입력받으면 한글이 깨지는경우가 종종 있습니다.

한글이 깨지는 이유는 POST요청에서 Server내부 인코딩이 안된것입니다.

POST요청같은 경우는 톰캣 내부에서 한글처리가 되지 않습니다.

기존 JSP Servlet에서는 이러한상황에서 한글이 인코딩해줄수있는 코드가 있었습니다.

request.setCharacterEncoding("UTF-8");

 

이러한 코드를 매번 작성해 줘야 했습니다. (소문자인 utf-8로 입력해도 상관 없음)

 

하지만 메서드마다 매번 동일하게 작성한다면 불편하기 때문에 스프링에서는 톰캣 내부 POST요청의 한글처리에 대해서 편하게 작성할 수 있는 방법을 제공하고 있습니다.

 

스프링 프로젝트를 올릴 때 톰캣의 서버를 설정했던 파일이 web.xml 이였습니다.

(DB,ConnectionPool bean등록 혹은 mvc패턴과 관련된 bean, DispatcherServlet에대한 설정도 이곳에서 함.)

 

우선 web.xml파일을 열고 디스패처 서블릿 등록 설정 밑에

	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

해당 코드를 추가하고 저장합니다.

 

※주의※

url pattern을 지정해주는 부분을 보시면 주석처리가 되어있습니다. 네이버 소스코드가 /*자바의 여러줄 주석처리를 주석처리로 인지해버려서 xml파일에서 /* 문자를 입력하면 주석처리됩니다.

오류가아니니 그대로 처음부터 끝까지 복사하시면 됩니다.

 

 

 

그냥 이렇게 붙여 넣어 버리면 재미가 없으니 한 문장씩 어떤 선언이 되어있는지 파악해 보겠습니다.

 

첫번째소스 묶음 입니다

	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>

제일 먼저 <filter> 태그로 묶여있습니다.

<filter> </filter>

필터라고하면 걸러내는것이죠?

여기서 필터라는 것은 웹 어플리케이션을 실행했을때 어디 특정위치에 적용할 필터인데 이름은 마음대로 지정할 수 있습니다

 

		<filter-name>encodingFilter</filter-name> 

 

필터의 이름이 encodingFilter

 

<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

 

CharacterEncodingFilter라는 필터클래스(스프링에서 제공하는 필터)

 

<init-param> </init-param>

 

초기값

 

<param-name>encoding</param-name>

 

encoding이라는 이름으로

 

<param-value>UTF-8</param-value>

 

UTF-8을 설정

 

 

 

두번째소스입니다.

위에 지정한 encodingFilter이름을 모든 패턴에 적용합니다.

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

 

 

		<filter-name>encodingFilter</filter-name>

위에 지정한 encodingFilter를

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

/* 즉, 모든 url패턴에 지정하겠다

 

이소스를 한번 넣어주시면 우리가 JSP Servlet처럼 매번 POST요청이 들어가는 곳에

request.setCharacterEncoding을 설정하지 않아줘도 됩니다.

 

728x90
반응형