프로그램/java

tomcat6 에서 한글 인코딩, 전반적으로 다시 처리 하기

mulderu 2011. 1. 15. 20:37

웹코딩 (java, jsp, servlet 코딩) 에서 한글이 문제가 되는 경우가 ... 많죠...
이부분 별로 이면서 종종 마음 아픕니다..  동강이시라면 .....  작은 댓글 바랍니다. ㅋㅋㅋ

특히 필자가 사용하는 tomcat6 에서 아래와 같이 처리 하면 일단 전반적으로.... OKAY ;)
자그럼 편하게 살죠 ~



package com.tbnfrmwk.web;

import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * 
 <pre>
 
 
 
 // server.xml
  

  <Connector port="80" protocol="HTTP/1.1" maxThreads="150" minSpareThreads="25" 
    maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" 
    debug="0" connectionTimeout="20000" disableUploadTimeout="true"
     
     URIEncoding="UTF-8"
     
     
    bufferSize="2048" maxProcessors="350" minProcessors="5"/>
  
  
  
 
 // WEB-INF/web.xml
  
   <filter>
        <filter-name>Turbine Character Encoding</filter-name>
        <filter-class>com.tbnfrmwk.web.CharactersetFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>Turbine Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
 
 
 </pre>
 * 
 * @author mulder
 *
 */
public class CharactersetFilter implements Filter {
  // ----------------------------------------------------- Instance Variables
  /**
   * The default character encoding to set for requests that pass through this
   * filter.
   */
  protected String encoding = null;
  /**
   * The filter configuration object we are associated with. If this value is
   * null, this filter instance is not currently configured.
   */
  protected FilterConfig filterConfig = null;
  /**
   * Should a character encoding specified by the client be ignored?
   */
  protected boolean ignore = true;
  // --------------------------------------------------------- Public Methods
  /**
   * Take this filter out of service.
   */
  public void destroy() {
     this.encoding = null;
     this.filterConfig = null;
  }
  /**
   * Select and set (if specified) the character encoding to be used to
   * interpret request parameters for this request.
   * 
   * @param request The servlet request we are processing
   * @param result The servlet response we are creating
   * @param chain The filter chain we are processing
   * @exception IOException if an input/output error occurs
   * @exception ServletException if a servlet error occurs
   */
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
        ServletException {
     // Conditionally select and set the character encoding to be used
     if (ignore || (request.getCharacterEncoding() == null)) {
        String encoding = selectEncoding(request);
        if (encoding != null) {
           request.setCharacterEncoding(encoding);
           request.getParameter("act"); // 이렇게 호출을 한번 해 줘야 효과가 발생하는데, 이유가 몰까 ???
                                        // 아마도 이렇게 해야, request parameter 에 영향을 주는가 보다 ~~~ 헐.
                                        // 현재 테스트 된 tomcat version 은 6.0.18 이다.
        }
     }
     // Pass control on to the next filter
     chain.doFilter(request, response);
  }
  /**
   * Place this filter into service.
   * 
   * @param filterConfig The filter configuration object
   */
  public void init(FilterConfig filterConfig) throws ServletException {
     this.filterConfig = filterConfig;
     this.encoding = filterConfig.getInitParameter("encoding");
     String value = filterConfig.getInitParameter("ignore");
     if (value == null)
        this.ignore = true;
     else if (value.equalsIgnoreCase("true"))
        this.ignore = true;
     else if (value.equalsIgnoreCase("yes"))
        this.ignore = true;
     else
        this.ignore = false;
  }

  // ------------------------------------------------------ Protected Methods
  /**
   * Select an appropriate character encoding to be used, based on the
   * characteristics of the current request and/or filter initialization
   * parameters. If no character encoding should be set, return
   * <code>null</code>.
   * <p>
   * The default implementation unconditionally returns the value configured by
   * the <strong>encoding</strong> initialization parameter for this filter.
   * 
   * @param request The servlet request we are processing
   */
  protected String selectEncoding(ServletRequest request) {
     return (this.encoding);
  }



}