인코딩은 영어권 개발자가 아닌경우에는 필수적으로 변환을 해야하는 작업이다.
이러한 인코딩 작업을 위해서 기존에 개발자들은 매번 다음과 같은 코드를 작성하는 수고를 했어야 했다.
String name = new String(request.getParameter("name").getBytes("iso-8859-1"), "UTF-8");
그러나 이러한 작업은 매우 번거롭고 귀찮은 작업이 아닐수 없다.
전달되는 파라미터가 몇개인데... 말이다.
그럴때 다음과 같이 인코딩 필터를 이용하여 사용하면 편리할 것이다.
package XXX;
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;
/**
* @author KIDO
* 인코딩 필터 처리 수행
*/
public class CommonEncodingFilter implements Filter {
/**
* 인코딩을 수행할 인코딩 캐릭터 셋 지정
*/
private String encoding = null;
/**
* 필터 설정 관리자
*/
protected FilterConfig filterConfig = null;
/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
/* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
if (request.getCharacterEncoding() == null) {
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
}
chain.doFilter(request, response);
}
/**
* @return
*/
public FilterConfig getFilterConfig() {
return filterConfig;
}
/**
* @param cfg
*/
public void setFilterConfig(FilterConfig cfg) {
filterConfig = cfg;
}
}
이렇게 인코딩 필터를 개발했다면, 다음으로는 Web.xml에 필터를 정의해야 한다.
참고로 인코딩 필터의 위치를 중요하게 봐야한다.
</servlet-mapping>다음에 인코딩 필터를 지정하고 있음을 확인하기 바란다. 이 부분의 순서는 매우 중요하다.
...
</servlet-mapping>
<filter>
<filter-name>Encoding Filter</filter-name>
<filter-class>kr.co.aritaum.brand.common.CommonEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
이것으로 인코딩 필터 설정이 끝이났다.
이제는 먼저 설명한 지루한 작업을 하지 않아도 된다.
여기서는 인코딩 타입을 UTF-8로 지정했다.
사실 요즘 대부분의 웹프로그램이 UTF-8을 지원하도록 권장하고 있다. 그러므로 UTF-8을 이용하여 사용하는 것이 아마도 몸에 좋을듯....
EUC-KR, KSC-5601의 경우 몇몇 패키지를 이용할때 문제가 발생하더라구...
가장 큰 예가 나모 웹에디터에서 말이다.
이러한 인코딩 작업을 위해서 기존에 개발자들은 매번 다음과 같은 코드를 작성하는 수고를 했어야 했다.
String name = new String(request.getParameter("name").getBytes("iso-8859-1"), "UTF-8");
그러나 이러한 작업은 매우 번거롭고 귀찮은 작업이 아닐수 없다.
전달되는 파라미터가 몇개인데... 말이다.
그럴때 다음과 같이 인코딩 필터를 이용하여 사용하면 편리할 것이다.
package XXX;
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;
/**
* @author KIDO
* 인코딩 필터 처리 수행
*/
public class CommonEncodingFilter implements Filter {
/**
* 인코딩을 수행할 인코딩 캐릭터 셋 지정
*/
private String encoding = null;
/**
* 필터 설정 관리자
*/
protected FilterConfig filterConfig = null;
/* (non-Javadoc)
* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)
*/
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
}
/* (non-Javadoc)
* @see javax.servlet.Filter#destroy()
*/
public void destroy() {
this.encoding = null;
this.filterConfig = null;
}
/* (non-Javadoc)
* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
if (request.getCharacterEncoding() == null) {
if (encoding != null) {
request.setCharacterEncoding(encoding);
}
}
chain.doFilter(request, response);
}
/**
* @return
*/
public FilterConfig getFilterConfig() {
return filterConfig;
}
/**
* @param cfg
*/
public void setFilterConfig(FilterConfig cfg) {
filterConfig = cfg;
}
}
이렇게 인코딩 필터를 개발했다면, 다음으로는 Web.xml에 필터를 정의해야 한다.
참고로 인코딩 필터의 위치를 중요하게 봐야한다.
</servlet-mapping>다음에 인코딩 필터를 지정하고 있음을 확인하기 바란다. 이 부분의 순서는 매우 중요하다.
...
</servlet-mapping>
<filter>
<filter-name>Encoding Filter</filter-name>
<filter-class>kr.co.aritaum.brand.common.CommonEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
이것으로 인코딩 필터 설정이 끝이났다.
이제는 먼저 설명한 지루한 작업을 하지 않아도 된다.
여기서는 인코딩 타입을 UTF-8로 지정했다.
사실 요즘 대부분의 웹프로그램이 UTF-8을 지원하도록 권장하고 있다. 그러므로 UTF-8을 이용하여 사용하는 것이 아마도 몸에 좋을듯....
EUC-KR, KSC-5601의 경우 몇몇 패키지를 이용할때 문제가 발생하더라구...
가장 큰 예가 나모 웹에디터에서 말이다.
'WEB_Programming > Struts' 카테고리의 다른 글
로그인 필터 예제 (Redirect 처리) (0) | 2008.07.02 |
---|---|
서블릿 필터 예제 (로그인에 이용해보기) (0) | 2008.07.02 |
스트러츠 리소스 번들 이용방법 (0) | 2008.07.01 |
Struts 프레임워크 적용 구조 (0) | 2008.06.17 |
6.2 Installation (0) | 2008.06.13 |